我想按公司名称总结金额,但公司名称的格式通常是不同的。如Apple Inc有时是苹果电脑,Apple Inc. 另外..我不知道如何我可以处理“标题”Python CSV和SUM
我的文件格式是CSV。
company amount
a 20
b 10
A' 30
bb 20
我想这样做:
line = readline() if line=='':
break
if 'Apple' in line:
sum(amount)
我想按公司名称总结金额,但公司名称的格式通常是不同的。如Apple Inc有时是苹果电脑,Apple Inc. 另外..我不知道如何我可以处理“标题”Python CSV和SUM
我的文件格式是CSV。
company amount
a 20
b 10
A' 30
bb 20
我想这样做:
line = readline() if line=='':
break
if 'Apple' in line:
sum(amount)
你将需要地图不管怎样,名称的变化要么通过分别合并每个名称并手动合并,要么先制作一个字典,以识别每个公司使用的所有别名。 if 'Apple' in line:
失败很难,因为它无法将不同公司的金额混合在一起。
Company = {"Apple": 1, "Apple Computer": 1, "AAPL": 1, "Apple, Inc": 1,
"Apple Vacations": 2, "Applebee's Restaurant": 3 }
sum[Company[name]] += amount
编辑2:如果你不知道所有事先的公司名称,那么你可以做的最好的是保持包含在输入文件中的唯一名称的轨道,并决定是否将它们合并后:
Company = {}
for <name, amount> in file: # pseudo-code for reading and parsing the input
if name in Company:
Company[name] += amount
else:
Company[name] = amount
非常感谢你!文件是这样的:公司,金额苹果,300 Apple.inc,500苹果电脑,1000 aa,750 bb,250 – user976856
,但我不能做清单,因为你已经做了... – user976856
如果你事先不知道所有的名字,那么您需要跟踪输入中包含的每个唯一名称。如果你的输入是Apple 10,Apple 20,Applebees 75,那么你的输出将有2个公司:Apple 30,Applebees 75.你必须决定是否将30和75加在一起作为一个公司(就像苹果公司一样和苹果电脑),或将它们分开成两个不同的公司。 – Dave
你的数据不是真正的CSV格式。明显的列不会被逗号,标签,甚至单个空格分开。有时会有多个空格...如果这是一个空格分隔值文件,则每个空格都会指示一个新列。多个空格意味着你每行有两个以上的列。
这个细节很重要,因为CSV文件很容易被csv module解析。但由于这不是真正的CSV文件,我们不能使用csv模块。
假设有总是应该用空格隔开只是两列,最后一列代表数字量(除了第一个标题行):
total=0
with open('data.csv','r') as f:
next(f) # skip the first (header) line
for line in f:
company,amount=line.rsplit(' ',1)
amount=float(amount)
if 'Apple' in company:
total+=amount
print(total)
谢谢sooo多!但Python说“空在字符串”我不知道.. ohh – user976856
我的意思是浮空() – user976856
您应该发布CSV文件的前几行 – Triptych