我目前正在使用两个csv文件,base.csv和另一个csv文件,output_20170503.csv将每天生成,因此我的目标是重新定义每个输出,以便它们具有与base.csv相同的数据
我的base.csv:
ID,Name,Number,Shape,Sound
1,John,45,Round,Meow
2,Jimmy,78,Sphere,Woof
3,Marc,,Triangle,Quack
4,Yun,50,Triangle,Meow
5,Nyancat,,Round,Quack
我的输出_20170503.csv
ID,Name,Number,Shape,Sound
1,John,,Round,Meow
2,Jimmy,,Sphere,Woof
3,Marc,,Triangle,Quack
4,Yun,,Triangle,
5,Nyancat,,Round,Quack
6,Marc,,Square,Woof
7,Jonnn,,Hexagon,Chirp
这里的目标是使用output_20170503.csv
从base.csv重新定义数据(ID为1-5)我想要实现的目标:
ID,Name,Number,Shape,Sound
1,John,45,Round,Meow
2,Jimmy,78,Sphere,Woof
3,Marc,,Triangle,Quack
4,Yun,50,Triangle,Meow
5,Nyancat,,Round,Quack
6,Marc,,Square,Woof
7,Jonnn,,Hexagon,Chirp
我已经搜索了解决方案,但我得到了什么;
合并两个csv文件(两个csv文件都有不同的列,对我来说不起作用)
从csv文件中删除重复项(使用output_20170503.csv附加base.csv然后删除重复项,因为它们具有不同的列号值而无效)
任何帮助将不胜感激,谢谢。
答案 0 :(得分:1)
你可以尝试这个,我使用前两项作为键并生成一个dict,然后迭代new
dict更新base
dict如果键不在base
:
new = {"".join(i.split(',')[:2]): i[:-1].split(',') for i in open('output_20170503.csv')}
base = {"".join(i.split(',')[:2]): i[:-1].split(',') for i in open('base.csv')}
base.update({i: new[i] for i in new if i not in base})
f=open("out.csv","w")
for i in sorted(base.values(), key=lambda x: x[0]):
if i[0]!="ID":
f.write(",".join(i)+"\n")
输出:
1,John,45,Round,Meow
2,Jimmy,78,Sphere,Woof
3,Marc,,Triangle,Quack
4,Yun,50,Triangle,Meow
5,Nyancat,,Round,Quac
6,Marc,,Square,Woof
7,Jonnn,,Hexagon,Chir
Python2.7 + 支持名为"字典理解的语法扩展"或者" dict comprehension",所以如果你正在使用Python2.6,你需要用以下代码替换前三行:
new = dict(("".join(i.split(',')[:2]),i[:-1].split(',')) for i in open('output_20170503.csv'))
base = dict(("".join(i.split(',')[:2]),i[:-1].split(',')) for i in open('base.csv'))
base.update(dict((i,new[i]) for i in new if i not in base))
答案 1 :(得分:0)
您应该尝试使用非常适合数据操作的pandas
库。您可以轻松阅读csv文件并执行merge operation。您的解决方案可能如下所示:
import pandas as pd
base_df = pd.read_csv('base.csv')
output_df = pd.read_csv('My output_20170503.csv')
output_df.update(base_df)
output_df.write_csv('My output_20170503.csv')
output_df上的缺失值现在已使用base_df中的缺失值进行更新。