繁体   English   中英

Python Count Row csv 中的唯一值

[英]Python Count Unique value in Row csv

我有 CSV,它在一个列表中。 例子:

[[R2C1,R01,API_1,801,API_TEST01],
[R2C1,R01,API_1,802,API_TEST02],
[R2C1,R01,API_1,801,API_TEST03]]

喜欢找出i[3]所有唯一的并计算它们。 结果:

[{num: 801, count: 2}, {num: 802, count: 1}]

这样我就可以调用dict键进行另一个测试。

代码:

    for row in data[1:]:
    vnum = row[3]
    ipcount.append({"num":vnum,"count": count})
    if row[3] not in ipcount:
        ipcount.append({"num":vlan})

如果您使用pandas库:

import pandas as pd
# Open your file using pd.read_csv() or from your list of lists
df = pd.DataFrame([['R2C1','R01','API_1',801,'API_TEST01'],
                   ['R2C1','R01','API_1',802,'API_TEST02'],
                   ['R2C1','R01','API_1',801,'API_TEST03']])
print(df)
      0    1      2    3           4
0  R2C1  R01  API_1  801  API_TEST01
1  R2C1  R01  API_1  802  API_TEST02
2  R2C1  R01  API_1  801  API_TEST03

在这里,您可以使用.value_counts()获取第3列中每个值的数量,然后使用字典理解将其转换为您需要的形式:

[{'num': k, 'count': v} for k, v in dict(df[3].value_counts()).items()]
[{'num': 801, 'count': 2}, {'num': 802, 'count': 1}]

您可以使用字典来执行此操作,以便按num元素对列表项进行分组。 最后一步是使用列表理解来实现您想要的结果。

dict = {}
for elem in data:
  if elem[3] not in dict:
    dict[elem[3]] = 0
  dict[elem[3]] = dict[elem[3]] + 1

final_list = [{'num' : elem, 'count': dict[elem]} for elem in dict]

输出

[{'num': 801, 'count': 2}, {'num': 802, 'count': 1}]

这是一个没有任何循环的纯pandas方法

import pandas as pd 

# define path to data
PATH = u'path\to\data.csv'

# create panda datafrmae
df = pd.read_csv(PATH, usecols = [0,1,2,3], header = 0, names = ['a', 'b', 'c','num'])

# Add count to column of interest
df['count'] = df.groupby('num')['num'].transform('count')

# only keep unique values in column of interest
df.drop_duplicates(subset=['num'], inplace = True)

# create dict from bowth columns
your_output = dict(zip(df.num, df.count))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM