【问题标题】:Read multiple CSV files in pairs of two them compare each two pair成对读取多个 CSV 文件,它们比较每两对
【发布时间】:2019-10-16 18:37:09
【问题描述】:

我有一个包含多个 CSV 文件的文件夹,名称如下 CINinfo_2019-08-08_rev1,CINinfo_2019-08-08_rev2,CINinfo_2019-08-08_rev3,CINinfo_2019-08-08_rev4,我在一个文件夹中有大约 70 个文件我的目的是自动化这个过程,这样我就可以以两对自动读取它们,然后比较每对的差异,并将结果作为一个组合表。目前,我正在手动阅读它们并比较差异,这是代码:

import pandas as pd
df1 = pd.read_csv("CINinfo_2019-08-08_rev1.csv")
df2 = pd.read_csv("CINinfo_2019-08-08_rev2.csv")

import numpy as np
rows,cols=np.where(comparison_values==False)

for item in zip(rows,cols):
    df1.iloc[item[0], item[1]] = '{} --> {}'.format(df1.iloc[item[0], item[1]],df2.iloc[item[0], item[1]])

这个过程太乏味了,因为我有其他包含 CSV 文件的文件夹需要阅读。 注意 CSV 文件是如何命名的,所有 CSV 文件都有相同的前缀 (CINinfo_2019-08-08_) 但在本例中为后缀 (rev) 有一个从 1 到 70 的增量数字。我需要它来成对读取文件的方式是格式 1 和 22 和 3、 3和 4 继续。在这种情况下,我比较像这样的对,CINinfo_2019-08-08_rev1 和 CINinfo_2019-08-08_rev2 然后 CINinfo_2019-08-08_rev2 和 CINinfo_2019-08-08_rev3 像这样,如何自动成对读取这些文件,然后比较每对文件的差异并拥有一个连接表?

【问题讨论】:

    标签: python python-3.x pandas csv dataframe


    【解决方案1】:

    你可以试试这样的:

    import os, re
    import pandas as pd
    import numpy as np
    
    # your directory path here
    path = r'path'
    
    # get all files 
    file_, pat = [], re.compile('.csv')
    for root, dirs, files in os.walk(path):
        file_ = [os.path.join(root, f) for f in files if pat.search(f)]
    
    # you may want to filter here, this line is just an example
    # filter for all csv files containing 'rev'
    file_ = [f for f in file_ if 'rev' in f]
    
    # loop through the files of interest
    for (idx, ff) in enumerate(file_[1:]):
        df1 = pd.read_csv(ff)
        df2 = pd.read_csv(file_[idx])
    
        rows, cols = np.where(comparison_values==False)
        for item in zip(rows,cols):
            # do calculation 
    

    此答案并非包罗万象,但希望能给您提供一种可能的方法。您可能需要调整过滤或排序。我没有展示如何将结果添加到最终表中,但最好的做法是创建一个 DataFrame temp 并将文件对中的值分配给它,然后使用 pd.concat 添加到最终的 DataFrame将包含所有结果。

    【讨论】:

    • 能否请您协助将结果放到决赛桌,或者我能否查看每对比较的结果。谢谢
    猜你喜欢
    • 2017-11-22
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 2016-11-13
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多