Python根据csv列中相同的数据把csv表合并

使用python将三个csv文件的表合并,三个表列名是相同的,连接方式是D列的数据和E列的数据都存在的行输出,不满足的不输出

import pandas as pd

读取三个csv文件,并存储为DataFrame对象

df1 = pd.read_csv('file1.csv')
df2 = pd.read_csv('file2.csv')
df3 = pd.read_csv('file3.csv')

使用merge函数根据列D和E进行内连接

merged_df = pd.merge(df1, df2, on=['D', 'E'])
merged_df = pd.merge(merged_df, df3, on=['D', 'E'])

将合并后的结果输出为一个新的csv文件

merged_df.to_csv('merged_file.csv', index=False)

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7470425
  • 这篇博客也不错, 你可以看下Python 读取csv文件时数字变成科学计数法(含有e)
  • 除此之外, 这篇博客: python对csv文件进行批量处理,修改csv某一列的数据并存储到新的csv文件中中的 先进行基于原文件列的内容的修改,再保存在新的csv中 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 将第二列的内容保存到 hist_column中,第一列的话采用row[0]

        with open(source_path+CsvFile[leng],'rt',encoding='utf-8') as histfile:
            hist_reader = csv.reader(histfile)
            hist_column =[row[1] for row in hist_reader]
    

    对第一列的内容进行处理
    (本文中的例子是对数据进行处理,通过仿真后的数据会带有单位(皮秒psec或者飞秒fsec),要把单位去掉,统一为皮秒,如果是飞秒的话要乘以0.001)
    将修改后的数据重新赋值给column, 这里重新赋值后不能将csv中的数据最终修改掉,尝试了很多种方法都不行,如果大家有更好的方法可以分享出来,我的代码如下:

        with open(source_path+CsvFile[leng],'rt',encoding='utf-8') as csvfile:
            reader = csv.reader(csvfile)
    
            column =[row[0] for row in reader]
            # hist_number = [row[1] for row in reader]
            # print(len(hist_number))
            for i in range(len(column)):
                if('psec' in column[i]):
                    column[i] = column[i].replace('psec', '')
    
                elif ('fsec' in column[i]):
                    column[i] = column[i].replace('fsec', '')
                    column[i] = float(column[i])*0.001
                    column[i] = str(column[i])
                elif('sec' in column[i] and 'E' in column[i]):
                    column[i] = str(0)
                else:
                    column[i] = column[i]
    

    这里遇到了几个问题:

    1. 同时在一个open块内读取两列数据时,第二列数据会为空 (这个问题没有解决,也没有想清楚,因此写了两个open)
    2. 该方法获得的列中的内容为str,需要注意
  • 您还可以看一下 章秀淞老师的python数据分析和可视化课程中的 读取和导出csv文件小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    首先,我们需要将三个csv文件读取并解析成数据表的形式。然后,我们可以使用Python的pandas库来合并这些表,并根据条件筛选出符合要求的行。最后,我们将合并后的数据表输出到一个新的csv文件中。

    下面是一个示例代码来完成这个任务:

    首先,我们需要安装pandas库,可以使用以下命令来安装:

    pip install pandas
    

    然后,我们可以使用以下代码来实现合并和筛选的功能:

    import pandas as pd
    
    # 读取三个csv文件并解析成数据表
    csv1 = pd.read_csv('file1.csv')
    csv2 = pd.read_csv('file2.csv')
    csv3 = pd.read_csv('file3.csv')
    
    # 合并三个数据表
    merged = pd.merge(csv1, csv2, on=['D', 'E'], how='inner')
    merged = pd.merge(merged, csv3, on=['D', 'E'], how='inner')
    
    # 将合并后的数据表输出到新的csv文件
    merged.to_csv('merged.csv', index=False)
    

    在上面的代码中,我们首先使用pd.read_csv函数读取每个csv文件,并将其解析成数据表的形式。然后,我们使用pd.merge函数来合并这些数据表,将on=['D', 'E']用于指定根据哪些列来进行合并,将how='inner'用于指定只输出那些D列和E列的数据都存在的行。

    最后,我们使用to_csv函数将合并后的数据表输出到一个新的csv文件中,其中index=False用于指定不输出行索引。

    请确保将代码中的file1.csvfile2.csvfile3.csv替换为你自己的csv文件路径,并运行代码来实现合并和筛选的功能。合并后的结果将保存在merged.csv文件中。