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

如何在python中使用具有相同ID的新记录更新csv,python,pandas,csv,Python,Pandas,Csv,我需要用相同的ID更新本地文件夹中预先存在的CSV。让我详细说明这个问题 df1: 这是我的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

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

df1:

这是我的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:

当我运行上述代码时,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
下面是一个使用glob和groupby+last的解决方案:

如果只有2个数据帧:

l = [df1,df2]
output = pd.concat(l).groupby("Item_id",as_index=False).last()
下面是一个使用glob和groupby+last的解决方案:

如果只有2个数据帧:

l = [df1,df2]
output = pd.concat(l).groupby("Item_id",as_index=False).last()
用于将df1和df2的索引设置为项目id,然后使用:

结果:

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
用于将df1和df2的索引设置为项目id,然后使用:

结果:

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

你的文件夹中会有更多的文件吗?是否要使用最后一个始终更新最后一个数据帧,还是仅替换空值?示例:如果ID2在第一个数据帧中不为null,您的预期输出是否相同?还有,假设文件夹中有多少个文件,大小是多少?文件夹中只有一个文件,但会有越来越多的文件出现&我想更新已有的记录。秩序不重要。如果一切正常那就太好了。你的文件夹里还会有更多的文件吗?是否要使用最后一个始终更新最后一个数据帧,还是仅替换空值?示例:如果ID2在第一个数据帧中不为null,您的预期输出是否相同?还有,假设文件夹中有多少个文件,大小是多少?文件夹中只有一个文件,但会有越来越多的文件出现&我想更新已有的记录。秩序不重要。如果一切正常,那就太好了。
l = [df1,df2]
output = pd.concat(l).groupby("Item_id",as_index=False).last()
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