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