通过将一个基本csv文件与另一个新csv文件合并来重新设置csv文件的基础

2024-06-07 10:37:03 发布

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

我目前正在处理两个csv文件,base.csv和另一个csv文件output20170503.csv,这两个文件将每天生成,因此我的目标是重新设置每个输出的基础,以便它们与base.csv具有相同的数据

My 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

我的输出\u 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

这里的目标是将base.csv中的数据(ID为1-5)与输出\u 20170503.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
6,Marc,,Square,Woof
7,Jonnn,,Hexagon,Chirp

我已经在寻找解决办法,但是我得到了什么

Merge two csv files (both of csv files have different columns, won't work for me)

Remove duplicates from a csv files (Appending base.csv with the output_20170503.csv and then remove the duplicates, won't work because they have different values for column Number)

任何帮助都将不胜感激,谢谢


Tags: 文件csvnameidnumber目标basemarc
2条回答

您应该尝试使用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')

输出_-df上缺少的值现在已用基_-df中的值更新

您可以尝试这样做,我使用前两项作为键并生成dict,然后迭代newdict,如果键不在base中,则更新basedict:

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+支持称为“dictionary comprehension”或“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))

相关问题 更多 >

    热门问题