提前感谢您的帮助。
我正在尝试获取一个csv文件,其中包含特定日期的特定ID的相对频率列表,并按日期合并所有数据,以便第二个CSV文件具有唯一日期列表和合并的相对频率该日期的每个ID。
第一个CSV文件(具有重复日期)如下所示:
ID,Date,Relfreq
CR,10061,9.01E-07
CR,10061,9.01E-07
TPN,10062,5.42782E-06
TPN,10062,8.14173E-06
TPN,10062,5.42782E-06
TPN,10062,8.14173E-06
TPN,10062,0.000179118
CR,10062,7.02E-07
CR,10062,1.05307E-06
CR,10062,7.02E-07
CR,10062,1.75512E-06
CR,10062,1.05307E-06
TPN,10070,1.99831E-05
TPN,10070,9.99156E-06
第二个CSV文件(只有唯一日期)如下所示:
Date,TPN,CR
10050,0,0
10051,0,0
10052,0,0
10060,0,0
10061,0,0
10062,0,0
10070,0,0
10071,0,0
10072,0,0
我需要脚本查看第一个文件,并为每个日期添加每个ID的所有相对频率。因此,例如,它应该添加Relfreq下具有ID" CR"的所有值。和日期" 10062"并且它应该单独添加Relfreq下具有ID" TPN"的所有值。和日期" 10062。"然后我希望它看第二个文件并找到" 10062"并将TPN Relfreqs的总和添加到第2列(标记为" TPN")和CR Relfrews总和到第3列(标记为" CR")。
我已经编写了以下脚本,但我不确定它实际上是在做我想要的,并且会在下面打印出错误:
import unicodecsv
import csv
import io
import math
from decimal import *
alist, blist = [], []
with open("wholetopic.csv", "rU") as fileA:
reader = csv.reader(fileA, delimiter=',')
for row in reader:
alist.append(row)
with open("date.csv", "rU") as fileB:
reader = csv.reader(fileB, delimiter=',')
for row in reader:
blist.append(row)
TPNlist, CRlist = [],[]
c = csv.writer(open("finaltopic.csv", "a"))
for brow in blist:
dateB = brow[0]
for arow in alist:
dateA = arow[1]
ID = arow[0]
RF = arow[2]
if dateB == dateA:
if ID == "TPN":
TPNlist.append(RF)
else:
if ID == "CR":
CRlist.append(RF)
continue
TPNsum = sum(TPNlist)
CRsum = sum(CRlist)
values = dateB,TPNsum,CRsum
c.writerow(values)
print "Done!"
这是错误:
File "consolidatedates.py", line 34, in <module>
TPNsum = sum(TPNlist)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
答案 0 :(得分:0)
TPNlist.append(的浮强>(RF))
CRlist.append(的浮强>(RF))
答案 1 :(得分:0)
该错误表明您尝试将int
添加到string
,但Python不支持此功能。
您可以在追加时尝试将RF
的值转换为int
,例如:
TPNlist.append(int(RF))
如果RF
已经是int
,请不要担心,如果它是"10"
或其他什么,可以解决您的问题。但是,如果RF
包含字母或非字母数字值(例如''
,例如,如果该行的该列在源文件中没有值),您将收到类似的错误这样:
ValueError: invalid literal for int() with base 10: ''
在这种情况下,您需要确保源文件格式正确,或者您要引用正确的行。