Automate the process of comparing the values of 2 csv files if value matches read the second csv into the DataFrame
我已将Excel导入数据框。看起来像这样:
然后,我使用代码按照\\'tx_id \\'对数据进行分组,并创建了单独的csv,其名称为tx_id,从而为我提供了这样的数据(3e6737ae-c3af-4d19-a645-d17fc73dbb7c.csv)。这是代码:
1 2 | for i, g in dframe.groupby('tx_id'): g.to_csv('{}.csv'.format(i.split('/')[0]), index=False) |
然后我创建了一个仅包含tx_id的单独dframe,然后使用以下代码删除了重复项:
1 | dframe1 = dframe1.drop_duplicates() |
现在我的数据框如下所示:
我已将此数据帧转换为csv。现在,我想将csv文件的名称(tx_id值)与新创建的csv中存在的数据进行比较,如果名称匹配,我想将csv文件(tx_id值)读入数据框。我以前是手动导入这些csv文件的,但我的数据集很大,因此每次读取数据并对其进行进一步处理都是不可行的。现在,我正在做的是将csv文件分别导入到数据框中。我正在使用此代码:
1 | df = pd.read_csv(' ae229a81-bb33-4cf1-ba2f-360fffb0d94b.csv') |
这给了我这样的结果:
然后我曾经使用以下代码来拆开它并应用value_counts:
1 | df1 = df.groupby('rule_id')['request_id'].value_counts().unstack().fillna(0) |
最终的结果看起来像这样:
我想使此过程自动化,但我不知道如何做。你们可以帮我吗?
您可以迭代
1 2 3 4 5 | import pandas as pd dfs = [] for tx in dframe1['tx_id']: dfs.append(pd.read_csv('%s.csv' % tx)) |
仅当它在与csv文件相同的目录中执行时才有效。否则:
1 2 3 4 5 6 7 | 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))) |
已编辑
如果要应用某些功能,而不是直接附加数据框:
1 2 3 | 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)) |
现在您的
如果要使用文件名查找它们,请使用
1 2 3 4 | 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) |