如何在python中使用具有相同ID的新记录更新csv

2024-05-04 05:47:43 发布

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

我需要用相同的ID更新本地文件夹中预先存在的CSV。让我详细说明这个问题

df1:

Item_id  Country  Compay
   1     Germany  sitz.co
   2              likrds.co
   3     Denmark  Axitr.co
   4     Italy

这是我的df1,我想在我的文件夹中将此文件导出为CSV。所以我这样做了

df1.to_csv(r'folder_path\df1.csv',index=False)

现在,我的文件夹中有df1。假设我有一个带有新item_ID的df2,以及df1中的一些item_ID。我想将df2附加到同一个文件中,如果该文件包含类似的item_id,它应该更新预先存在的记录,并将新的item_id记录附加到该CSV中

df2:

Item_id  Country   Compay
   11    Argentina sitz.co
   2     Russia    likrds.co
   13    Denmark   Axitr.co
   4     Italy     ghrx.co

df2.to_csv(r'folder_path\df1.csv',mode='a',index=False)

当我运行上述代码时,CSV将附加重复的记录,但我需要根据项目ID使用新记录更新这些记录

所需的_csv:

Item_id  Country   Compay
   1     Germany   sitz.co
   2     Russia    likrds.co
   3     Denmark   Axitr.co
   4     Italy     ghrx.co
   11    Argentina sitz.co
   13    Denmark   Axitr.co

Tags: csv文件夹id记录itemcountrydf1df2
2条回答

下面是一个使用globgroupby+last的解决方案:

import glob
list_of_files = glob.glob(r'folder_path\*.csv')
dfs = [pd.read_csv(i) for i in list_of_files]
output = pd.concat(dfs).groupby("Item_id",as_index=False).last()

   Item_id    Country     Compay
0        1    Germany    sitz.co
1        2     Russia  likrds.co
2        3    Denmark   Axitr.co
3        4      Italy    ghrx.co
4       11  Argentina    sitz.co
5       13    Denmark   Axitr.co

如果只有2个数据帧:

l = [df1,df2]
output = pd.concat(l).groupby("Item_id",as_index=False).last()

使用^{}df1df2的索引设置为Item_id,然后使用^{}

df = df2.set_index('Item_id')\
        .combine_first(df1.set_index('Item_id')).reset_index()

结果:

print(df)
   Item_id    Country     Compay
0        1    Germany    sitz.co
1        2     Russia  likrds.co
2        3    Denmark   Axitr.co
3        4      Italy    ghrx.co
4       11  Argentina    sitz.co
5       13    Denmark   Axitr.co

相关问题 更多 >