Python:如何从两个CSV列以及任何额外的或';缺失';价值观
基本上,我们有这两个列,我们想让'have'列与'Should have'列匹配。我希望代码创建一个新列,显示“have”中的重复项或额外项,另一列显示“Should have”中的金额,但“have”中缺少 我不知道怎样才能找到重复的Python:如何从两个CSV列以及任何额外的或';缺失';价值观,python,csv,compare,Python,Csv,Compare,基本上,我们有这两个列,我们想让'have'列与'Should have'列匹配。我希望代码创建一个新列,显示“have”中的重复项或额外项,另一列显示“Should have”中的金额,但“have”中缺少 我不知道怎样才能找到重复的 文件:test.csv 不太确定所有可能的案例都是从这个问题判断出来的,例如,什么将构成“缺失”?尽管“Have”值不等于“Should Have”值,为什么第2、3和5行没有列出 无论如何,希望这能成为一个有用的指南。您可以在中阅读有关CSV处理的更多信息
文件:test.csv
不太确定所有可能的案例都是从这个问题判断出来的,例如,什么将构成“缺失”?尽管“Have”值不等于“Should Have”值,为什么第2、3和5行没有列出 无论如何,希望这能成为一个有用的指南。您可以在中阅读有关CSV处理的更多信息 文件: 输出:
>> print(extras)
# [(2000.0, [8]), (1000.0, [7])]
>> print(missing)
# [(88.74, [0, 2, 8]), (9.99, [6])]
>> print(duplicates)
# [(200.0, [0, 4, 5, 8])]
一些注意事项:
方法允许我们轻松地向一个键追加(或创建一个新列表),以便为每个值存储多个行ID(请参阅)dict.setdefault(key,[]).append(value)
- 如果您使用的是Python2.x和Python3.x的
,请使用items()
items()
- 我用(键,值)元组格式化了输出列表。原因是我不确定您要保留/丢弃哪些行ID,所以将它们都放在那里!为它们编制索引
将为您提供一个元组,tupl=output\u list[#]
或tupl[1]
将分别为您提供行ID的值或列表tupl[0]
set
)。我个人不喜欢重复的解决方案,希望你能找到一个更优雅的方式!很抱歉,您只能相互减去集合。修正。谢谢你的帮助,我会努力使它更优雅,我还在这个项目的早期阶段,我想投入更多的时间。另外,我是python新手,所以我感谢所有的帮助。
~$ cat test.csv
have , should-have
200 , 88.74
42.5 , 42.5
2.99 , 88.74
88.74 , 2.99
200 , 200
200 , 8.7
8.7 , 9.99
1000 , 200
200
88.74
2000, 88.74
>> print(extras)
# [(2000.0, [8]), (1000.0, [7])]
>> print(missing)
# [(88.74, [0, 2, 8]), (9.99, [6])]
>> print(duplicates)
# [(200.0, [0, 4, 5, 8])]