【问题标题】:Automate the process of comparing the values of 2 csv files if value matches read the second csv into the DataFrame如果值匹配,则自动比较 2 个 csv 文件的值的过程将第二个 csv 读入 DataFrame
【发布时间】:2019-07-20 02:40:08
【问题描述】:

我已将 excel 导入数据框。它看起来像这样:

然后我使用代码根据“tx_id”对这些数据进行分组,并创建名为 tx_id 的单独 csv,它为我提供了这样的数据 (3e6737ae-c3af-4d19-a645-d17fc73dbb7c.csv)。这是代码:

for i, g in dframe.groupby('tx_id'):
     g.to_csv('{}.csv'.format(i.split('/')[0]), index=False)

然后我创建了一个仅包含 tx_id 的单独 dframe,然后使用以下代码删除了重复项:

dframe1 = dframe1.drop_duplicates()

现在我的数据框如下所示:

我已将此数据框转换为 csv。现在我想将 csv 文件的名称(即 tx_id 值)与新创建的 csv 中存在的数据进行比较,如果名称匹配,我想将 csv 文件(即 tx_id 值)读入数据框。我曾经手动导入这些 csv 文件,但我有一个很大的数据集,我每次都读取数据并对其进行进一步处理是不可行的。现在我正在做的是将 csv 文件单独导入数据框。我正在使用此代码:

df = pd.read_csv(' ae229a81-bb33-4cf1-ba2f-360fffb0d94b.csv')

这给了我这样的结果:

然后我使用以下代码取消堆叠并应用 value_counts:

df1 = df.groupby('rule_id')['request_id'].value_counts().unstack().fillna(0)

最后的结果是这样的:

我想自动化这个过程,但我不知道怎么做。你们能帮帮我吗?

【问题讨论】:

    标签: python pandas csv dataframe


    【解决方案1】:

    您可以迭代您的 tx_id 并将数据帧附加到 list

    import pandas as pd
    
    dfs = []
    for tx in dframe1['tx_id']:
        dfs.append(pd.read_csv('%s.csv' % tx))
    

    仅当它与 csv 文件在同一目录中执行时才有效。否则:

    import os
    import pandas
    
    dfs = []
    
    for tx in dframe1['tx_id']:
        dfs.append(pd.read_csv(os.path.join('/path/to/csv/', '%s.csv' % tx)))
    

    已编辑

    如果你想应用一些功能,而不是直接附加数据框:

    for tx in dframe1['tx_id']:
        df = pd.read_csv(os.path.join('/path/to/csv/', '%s.csv' % tx))
        dfs.append(df.groupby('rule_id')['request_id'].value_counts().unstack().fillna(0))
    

    现在您的dfs 拥有所有value_counts() 结果。您可以使用索引来引用它们。

    如果您想使用文件名找到它们,请使用dict

    df_dict = dict()
    for tx in dframe1['tx_id']:
        df = pd.read_csv(os.path.join('/path/to/csv/', '%s.csv' % tx))
        df_dict[tx] = df.groupby('rule_id')['request_id'].value_counts().unstack().fillna(0)
    

    【讨论】:

    • 这是工作@Chris。但是我可以将它们放在单独的数据框中,例如为每个按 tx_id 分组的数据框创建一个单独的数据框。
    • @sagarkhanna 我不确定你在单独的数据框中是什么意思。 dfs 包含单独的数据框。您想按名称访问数据框吗?
    • 是的。之前我曾经做的是,我曾经将 csv 导入为 df = pd.read_csv('csv_name.csv') 然后我必须将其拆开并在其上使用 value_counts。我将编辑我的问题并添加我需要的结果。
    • @sagarkhanna 我认为如果您发布您想要做的事情并因此从每个数据帧中获取您将单独应用的代码方面会更好。
    • 我已经应用了您的代码@Chris,但我收到了“列表索引必须是整数,而不是 str”的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多