事先谢谢你的帮助。你知道吗
我试图采取一个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 Relfreq的和添加到第二列(标记为“TPN”)和第3列(标记为“CR”)的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'
该错误表示您正试图将
int
添加到string
,这在Python中不受支持。你知道吗您可以在追加时尝试将
RF
的值强制转换为int
,例如:如果
RF
已经是一个int
,不用担心,如果是"10"
或者别的什么,可以解决你的问题。但是,如果RF
包含字母或非字母数字值(如''
,例如,如果行的该列在源文件中没有值),则会出现如下错误:在这种情况下,您需要确保源文件的格式正确,或者引用的行正确。你知道吗
你知道吗TPNlist.append文件(浮动(RF))
CRlist.append文件(浮动(RF))
相关问题 更多 >
编程相关推荐