如何从 csv 文件中分别打印多列的计数?

问题描述 投票:0回答:1

我需要打印列名称以及每个值在其中出现的次数。该数据集有 6 个不同的列,我需要它打印 3 个列,即“源”、“目标”和“协议”,每个列按降序排列。我在这里搜索过,我能找到的只是有人只想打印一列,我需要它来打印 3 列。这是 file

我已经让它打印我需要的所有列和计数,但我认为它正在打印所有列的计数,我需要为每一列单独计数,我不知道如何得到它去做。我尝试在每个标题周围加上括号,但这不起作用。这就是我所拥有的:

import pandas as pd
from collections import Counter

unitnine_dataset = 'IN300_Unit9.csv'
unitnine_dataset = pd.read_csv(unitnine_dataset, sep=',',
                      decimal='.', header='infer')

df = pd.DataFrame(unitnine_dataset)
count = df[['Source', 'Destination', 'Protocol']].value_counts(ascending=False)

print(count)
python pycharm
1个回答
0
投票

您可能希望通过某种字典来累积计数,其中键是您感兴趣的列和各个

Counter()
对象的值。

这是概念证明:

import csv
import io
import collections

test_data = """
name,col1,col2
a,1,1a
b,2,b2
c,1,b2
""".strip()

columns_meta = {}
with io.StringIO(test_data) as file_in: ## simulare open()
    for row in csv.DictReader(file_in):
        for key, value in row.items():
            columns_meta.setdefault(key, collections.Counter())[value] += 1

for col, val in columns_meta.items():
    print(f"column: {col}")
    for value, count in val.most_common():
        print(f"\t{value}: {count}")

这应该给你:

column: name
        a: 1
        b: 1
        c: 1
column: col1
        1: 2
        2: 1
column: col2
        b2: 2
        1a: 1
© www.soinside.com 2019 - 2024. All rights reserved.