我有一个.csv文件,如下所示:
12/26/2022 AECIZ 516.09 536.37 652.42 528.71 510.65 658.19 566.92 740.25 695.88 574.17 567.22 386.42
12/26/2022 AECIZ 0 0 0 0 0 0 0 0 0 0 0 0
12/26/2022 AECO 657.94 597.16 575.53 545.27 558.24 587.9 627.29 653.44 577.64 528.35 556.93 675.62
12/26/2022 AECO 0 0 0 0 0 0 0 0 0 0 0 0
12/26/2022 AEP 0 0 0 0 0 0 0 0 0 0 198.5 350.5
12/26/2022 AEP -2852.5 -1585.21 -1201.32 -634.19 -1147.48 -1227.88 -773.48 -633.44 -407.06 -150.65 0 0
12/26/2022 ALTE 187.74 227.4 301.39 252.88 323.56 290.2 314.86 315.52 272.74 241.95 280.06 269.78
12/26/2022 ALTE 0 0 0 0 0 0 0 0 0 0 0 0
12/26/2022 ALTW 760.49 682.41 553.86 405.95 302.72 281.95 359.79 439.3 268.91 14.16 0 0
12/26/2022 ALTW 0 0 0 0 0 0 0 0 0 0 -146.06 -238.28
我想通过分别添加每个元素来组合具有相同名称的行(从第3列开始)
作为python的新用户,我真的不知道如何做到这一点,希望你能帮助我。
好的,这是我到目前为止的代码:
eco_inter = open("Economic_interchange_real.csv")
eco_change = open("Economic_interchange_combine.csv","w")
eco_inter_reader = csv.reader(eco_inter)
company_track = ['','']
new_line = {}
for list_line in eco_inter_reader:
for date in dates:
if (list_line[0] == date):
if (list_line[1] == company_track[1]):
eco_change.write(list_line[0]+','+list_line[1])
for j in (range(12)):
new_line[j] = list_line[2+j]+company_track[2+j]
eco_change.write(','+new_line[j])
eco_change.write("\n")
else:
company_track = list_line
eco_inter.close()
eco_change.close()
它确实将同一家公司与同一日期合并,但数据没有求和,只列在新csv文件的每个单元格中
顺便说一句,日期是一个包含所有日期的列表,如第一栏中的示例所示
答案 0 :(得分:0)
我认为您需要将所有数字的字符串表示形式转换为实际数字。
new_line[j] = str(float(list_line[2+j]) + float(company_track[2+j]))
目前,您只是连接字符串。如果你能得到它,我也建议你使用熊猫。
答案 1 :(得分:0)
您可以使用字典对具有相同日期和名称的行进行分组:
combined = {} # (date, name) -> [values for each line with this date and name]
with open("Economic_interchange_real.csv", "r") as infile:
for line in map(str.split, infile):
date, name, numbers = line[0], line[1], map(float, line[2:])
# setdefaut: add entry if it does not exist
combined.setdefault((date, name), []).append(numbers)
现在,对于每个组,您可以zip
和sum
所有值并将这些行写入文件:
with open("Economic_interchange_comb.csv", "w") as outfile:
for key in combined:
line = list(key) + map(sum, zip(*combined[key]))
outfile.write("\t".join(map(str, line)) + "\n")
输出:
12/26/2022 AECO 657.94 597.16 575.53 545.27 558.24 587.9 627.29 653.44 577.64 528.35 556.93 675.62
12/26/2022 ALTW 760.49 682.41 553.86 405.95 302.72 281.95 359.79 439.3 268.91 14.16 -146.06 -238.28
12/26/2022 ALTE 187.74 227.4 301.39 252.88 323.56 290.2 314.86 315.52 272.74 241.95 280.06 269.78
12/26/2022 AECIZ 516.09 536.37 652.42 528.71 510.65 658.19 566.92 740.25 695.88 574.17 567.22 386.42
12/26/2022 AEP -2852.5 -1585.21 -1201.32 -634.19 -1147.48 -1227.88 -773.48 -633.44 -407.06 -150.65 198.5 350.5