自动比较两个CSV文件的值,并且如果值匹配,将第二个CSV文件读入DataFram。

2024-04-16 13:18:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

enter image description here

然后,我使用一个代码按照“tx\u id”对这些数据进行分组,并用tx\u 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\u id,然后使用以下代码删除了重复的数据帧:

dframe1 = dframe1.drop_duplicates()

现在,我的数据帧如下所示:

enter image description here

我已将此数据帧转换为csv。现在我想比较csv文件的名称(即tx\u id值)和新创建的csv中的数据,如果名称匹配,我想将csv文件(即tx\u id值)读入数据帧。我以前手动导入这些csv文件,但我有一个大的数据集,这是不可行的,我读取数据,每次做进一步的处理。现在我正在做的是将csv文件分别导入到一个数据帧中。我正在使用此代码:

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

结果如下:

enter image description here

然后我使用以下代码将其取消堆叠并应用值\u计数:

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

最终结果是这样的:

enter image description here

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


Tags: 文件csv数据代码名称iddffor
1条回答
网友
1楼 · 发布于 2024-04-16 13:18:08

您可以迭代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)))

编辑

如果要应用某些函数,请不要直接附加dataframe:

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)

相关问题 更多 >