如何从CSV文件分别统计指定多列的频次并按降序输出
解决方法
要实现对「Source」「Destination」「Protocol」三列单独统计每个值的出现次数并降序排列,你需要对每一列分别调用value_counts()方法,而非直接在多列组合上调用。以下是几种可行的实现方式:
方法一:循环遍历目标列
import pandas as pd # 读取数据集 df = pd.read_csv('IN300_Unit9.csv', sep=',', decimal='.', header='infer') # 定义需要统计的列名 target_cols = ['Source', 'Destination', 'Protocol'] # 遍历每一列,输出统计结果 for col in target_cols: print(f"=== {col} 列值统计 ===") # value_counts默认按降序排列,ascending=False可省略 count = df[col].value_counts(ascending=False) print(count) print("\n")
方法二:使用apply批量处理
如果想一次性获取所有列的统计结果并存储,可以用apply方法批量处理:
import pandas as pd df = pd.read_csv('IN300_Unit9.csv', sep=',', decimal='.', header='infer') target_cols = ['Source', 'Destination', 'Protocol'] # 对目标列批量应用value_counts,得到包含各列统计结果的字典 count_results = df[target_cols].apply(pd.Series.value_counts, ascending=False) # 遍历输出每个列的结果,去掉NaN值(对应其他列无匹配的值) for col in target_cols: print(f"=== {col} 列值统计 ===") print(count_results[col].dropna()) print("\n")
关键说明
- 原代码中
df[['Source', 'Destination', 'Protocol']].value_counts()会统计三列值的组合出现次数,这是你之前得到组合统计结果的原因。 df[col].value_counts()默认按出现次数降序排列,因此ascending=False参数可省略,若需要明确指定也可以保留。
内容的提问来源于stack exchange,提问作者Avetra
相关产品推荐
相关产品推荐

