【问题标题】:calculation then and insert results into a csv in python然后计算并将结果插入python中的csv
【发布时间】:2013-09-27 17:40:55
【问题描述】:

这是我的第一篇文章,但我希望您能告诉我如何执行计算并将值插入 csv 数据文件。

对于每一行,我希望能够获取每个 'uniqueclass' 并将第 12 列中获得的分数相加。请参阅下面的示例数据;

text1,Data,Class,Uniqueclass1,data1,data,2,data2,data3,data4,data5,175,12,data6,data7
text1,Data,Class,Uniqueclass1,data1,data,2,data2,data3,data4,data5,171,18,data6,data7
text1,Data,Class,Uniqueclass2,data1,data,4,data2,data3,data4,data5,164,5,data6,data7
text1,Data,Class,Uniqueclass2,data1,data,4,data2,data3,data4,data5,121,21.5,data6,data7
text2,Data,Class,Uniqueclass2,data1,data,4,data2,data3,data4,data5,100,29,data6,data7
text2,Data,Class,Uniqueclass2,data1,data,4,data2,data3,data4,data5,85,21.5,data6,data7
text3,Data,Class,Uniqueclass3,data1,data,3,data2,data3,data4,data5,987,35,data6,data7
text3,Data,Class,Uniqueclass3,data1,data,3,data2,data3,data4,data5,286,18,data6,data7
text3,Data,Class,Uniqueclass3,data1,data,3,data2,data3,data4,data5,003,5,data6,data7

例如,第一个 Uniqueclass 持续到前两行。因此,我希望能够在该行上插入一个后续值,即“346”(175 和 171 的总和)。结果如下所示:

text1,Data,Class,Uniqueclass1,data1,data,2,data2,data3,data4,data5,175,12,data6,data7,346
text1,Data,Class,Uniqueclass1,data1,data,2,data2,data3,data4,data5,171,18,data6,data7,346

我希望能够为每个唯一类做到这一点'

非常感谢

【问题讨论】:

  • 你有没有尝试过?
  • 打开你的python解释器并尝试:"blah,230,bleh".split(',')。它可能会有所帮助。

标签: python csv python-2.7 dataset sum


【解决方案1】:

我一直喜欢 defaultdict 这类东西。

这是我的尝试:

from collections import defaultdict

class_col = 3
data_col = 11

# Read in the data
with open('path/to/your/file.csv', 'r') as f:
    # if you have a header on the file
    # header = f.readline().strip().split(',')
    data = [line.strip().split(',') for line in f]

# Sum the data for each unique class.
# assuming integers, replace int with float if needed
count = defaultdict(int)
for row in data:
    count[row[class_col]] += int(row[data_col])

# Append the relevant sum to the end of each row
for row in xrange(len(data)):
    data[row].append(str(count[data[row][class_col]]))

# Write the results to a new csv file
with open('path/to/your/new_file.csv', 'w') as nf:
    nf.write('\n'.join(','.join(row) for row in data))

【讨论】:

  • 感谢额外的 cmets!一旦我得到 15 分,我会支持你的答案。 :)
  • 这段代码很棒,我尝试过使用它,以便它将计数放在末尾而不是总和。然而没有效果。如果这很容易,我将非常感谢您对如何做到这一点发表评论。
  • 抱歉回复晚了。我已经放假了。要使其成为(类实例的)计数而不是总和,请将int(row[data_col]) 替换为1
猜你喜欢
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
相关资源
最近更新 更多