Python:和匹配列
输入文件是Python:和匹配列,python,csv,Python,Csv,输入文件是 10/14/2017 21:02 11/04/2017 134 15 10/14/2017 21:02 11/04/2017 134 15 10/14/2017 21:02 11/04/2017 134 15 10/13/2017 20:58 11/03/2017 132 10 10/13/2017 20:58 11/03/2017 132 10 10/13/2017 20:58 11/0
10/14/2017 21:02 11/04/2017 134 15
10/14/2017 21:02 11/04/2017 134 15
10/14/2017 21:02 11/04/2017 134 15
10/13/2017 20:58 11/03/2017 132 10
10/13/2017 20:58 11/03/2017 132 10
10/13/2017 20:58 11/03/2017 132 10
10/13/2017 20:58 11/03/2017 132 10
我希望输出为第5列中的值之和,以匹配第1列中的值
10/14/2017 45 //(ie. 15+15+15)
10/13/2017 40 //(ie. 10+10+10+10)
有人能帮我看一下Python代码吗?假设第1列中的日期是连续的,您可以逐行读取CSV,如果日期与前一个日期相同,请从该行添加第5列以保持一个连续的总数。如果日期不同,则输出总计,并在下一个日期从零开始重新启动总计。您可以使用
集合中的defaultdict
from collections import defaultdict
temp = defaultdict(int)
with open("testfile.csv", 'r') as infile:
for line in infile:
fields = line.split()
temp[fields[0]] += int(fields[-1])
print(temp)
# defaultdict(int, {'10/13/2017': 40, '10/14/2017': 45})
处理此类问题的一个好方法是尝试将其分解为子问题,并分别解决每个子问题。此问题的细分可能是:
如何提取输入文件中每行的内容?想想是什么把每一列分开
如何为第0列中的每个值存储第5列的运行总数?您需要某种数据结构,理想情况下,这种结构可以让您快速查找列0值的总计
完成后,如何将这些总计和第0列值写入输出文件
我鼓励您在寻找他人提供代码之前,继续自己解决问题。使用pandas…?其Solaris服务器我没有pandas,我想使用CSVP。请显示您迄今为止做了哪些工作以及出现了哪些问题。这将更有帮助。使用-1
更好,如@stamaimer所示。这项工作我得到了以下形式的输出defaultdict(int,{'10/13/2017':40,'10/14/2017':45}),谢谢stamaimer
data = """10/14/2017 21:02 11/04/2017 134 15
10/14/2017 21:02 11/04/2017 134 15
10/14/2017 21:02 11/04/2017 134 15
10/13/2017 20:58 11/03/2017 132 10
10/13/2017 20:58 11/03/2017 132 10
10/13/2017 20:58 11/03/2017 132 10
10/13/2017 20:58 11/03/2017 132 10
"""
result = {}
for line in data.splitlines():
key = line.split(' ')[0]
value = line.split(' ')[11]
if result.get(key):
result[key] = result[key] + int(value)
else:
result[key] = int(value)
print(result)