Python:如何计算特定列中的项目

时间:2015-03-30 01:21:53

标签: python

我必须计算csv文件的特定列中的项目数(由" /"分隔)。

示例csv图表:

Col1   Col2   Col3   Col4
1      A/B/C   1      1
2      E       2      2
3      Z/F     3      3
4      G       4      4

所以我需要只计算Col2中的A,B,C,E,Z,F,G,我需要确保" Col2"没有计入总数。我的问题是" Col2"正计入最终数字......

答案应该是7.

这是我到目前为止所做的:     import csv

total = {}
with open('result.csv') as f:
    rows = csv.reader(f)
    for line in rows:
        total = 0
        for num in line.strip().split('/'):
            total =+ int(num)

    print total

任何帮助或提示将不胜感激!先感谢您。 :)

4 个答案:

答案 0 :(得分:1)

这将仅在包含正斜杠的第2列上进行拆分,然后它将找到spitted项的长度,并将它添加到count变量的长度。

with open('file') as f:
    reader = csv.reader(f)
    next(reader, None)
    count = 0
    for line in reader:
        count += len(line[1].split('/'))
    print(count)

答案 1 :(得分:0)

如何计算每行中的斜杠数?

total = 0
for line in rows:
    numSlashes = line.count('/')
    if numSlashes > 0:
        total += numSlashes + 1

编辑:如果要在出现斜线时计算项,请使用上述逻辑。如果你想计算单个项目,但只是忽略第一行,那么只需跳过第一行,例如

for line in rows[1:]:
    numSlashes = line.count('/')
    total += numSlashes + 1

答案 2 :(得分:0)

如果您实际上有逗号分隔值:

with open('in.csv') as f:
    next(f) # skip header
    rows = csv.reader(f)
    print(sum(len(row[1].split("/")) for row in rows))
7

答案 3 :(得分:0)

您可以使用pandas库使用get_dummies()方法解决此问题:

>>> import pandas
>>> pandas.read_csv('result.csv')
>>> df.Col2.str.get_dummies(sep="/").values.sum()
7

如果您需要做的不仅仅是计数,这可能是一个好主意,例如,如果您需要每个项目出现的时间。

>>> df.Col2.str.get_dummies(sep="/").sum(0)

A    1
B    1
C    1
E    1
F    1
P    1
Z    1
dtype: int64