我尝试合并两个csv,即更新由旧数据(old.csv)组成的csv,如果新数据(new.csv)的csv中存在新数据(new.csv)。两者的列数(标题)相同,并且可以通过唯一的id进行标识
old.csv
id,description,listing,url,default
2471582,spacex,536,www.spacex.com,0
3257236,alibaba,875,www.alibaba.com,0
3539697,ethihad,344,www.etihad.com,0
2324566,pretzel,188,www.example.com,1
new.csv
id,description,listing,url,default
2471582,spacex,888,www.spacex.com,0
3539697,ethihad,348,www.etihad.com,0
2324566,pretzel,396,www.pretzelshopexample12345.com,1
以下是我迄今为止在Python&;熊猫:
import pandas as pd
f1 = pd.read_csv('old.csv', delimiter=',')
f2 = pd.read_csv('new.csv', delimiter=',')
with open('final.csv', 'w', encoding='utf-8', newline='') as out:
pd.merge(f1, f2, on='id', how='left').to_csv(out, sep=',', index=False)
电流输出:
id,description_x,listing_x,url_x,default_x,description_y,listing_y,url_y,default_y
2471582,spacex,536,www.spacex.com,0,spacex,888.0,www.spacex.com,0.0
3257236,alibaba,875,www.alibaba.com,0,,,,
3539697,ethihad,344,www.etihad.com,0,ethihad,348.0,www.etihad.com,0.0
2324566,pretzel,188,www.example.com,1,pretzel,396.0,www.pretzelshopexample12345.com,1.0
我正在努力实现的目标:
id,description,listing,url,default
2471582,spacex,888,www.spacex.com,0
3257236,alibaba,875,www.alibaba.com,0
3539697,ethihad,344,www.etihad.com,0
2324566,pretzel,396,www.pretzelshopexample12345.com,1
因此,我想知道如果new.csv
中存在较新的数据,如何使用pandas基于id合并两个csv以替换整行,同时将其余行保留在old.csv中?提前感谢您在这方面的帮助
这将是我的第一个StackOverflow响应,因此可能会出现更漂亮的解决方案;)。。。但在此之前,我的方法是有效的:
换句话说,我基本上是使用循环来迭代单个客户机ID。我创建了两个列表,其中包括相应的客户机ID和一个新的DataFrame,它的列与以前相同,将使用for循环填充。 因此,如果旧的\u id在新的\u id列表中,脚本将从新的\u csv中提取该id的数据,如果旧的\u id不在,它将从旧的\u csv中提取数据
希望有帮助,期待反馈
这应该起作用:
输出:
f1:
相关问题 更多 >
编程相关推荐