所以我现在有一个数据集,其中有一个名为' logid'它由4位数字组成。我的csv文件中有大约200k行,我想计算每个唯一的logid并输出这样的内容;
Logid | #ofoccurences为每个唯一ID。所以它可能是1000 | 10意味着在csv文件列' logid'中看到logid 1000 10次。分离器|没有必要,只是让你们更容易阅读。这是我目前的代码:
import pandas as pd
import os, sys
import glob
count = 0
path = "C:\\Users\\cam19\\Desktop\\New folder\\*.csv"
for fname in glob.glob(path):
df = pd.read_csv(fname, dtype=None, names=['my_data'], low_memory=False)
counts = df['my_data'].value_counts()
counts
使用这个我得到一个奇怪的输出,我不太明白:
4 16463
10013 490
pserverno 1
Name: my_data, dtype: int64
我知道我在最后一行做错了什么
counts = df [' my_data']。value_counts()
但我不太清楚是什么。作为参考,我提取的值来自excel文件中的行C(所以我猜那是第3列?)提前感谢!
答案 0 :(得分:3)
确定。从我的理解。我认为csv
文件可能是这样的。
row1,row1,row1
row2,row2,row2
row3,row3,row3
logid,header1,header2
1000,a,b
1001,c,d
1000,e,f
1001,g,h
我已经用csv
文件格式
# skipping the first three row
df = pd.read_csv("file_name.csv", skiprows=3)
print(df['logid'].value_counts())
输出看起来像这样
1001 2
1000 2
希望这会有所帮助。
更新1
df = pd.read_csv(fname, dtype=None, names=['my_data'], low_memory=False)
在此行中,参数names = ['my_data']
创建数据框的新标头。由于您的csv
文件包含标题行,因此您可以跳过此参数。并且作为主要标题你想要row3
,所以你可以跳过前三行。最后一件事是你正在阅读给定路径中的所有csv
文件。所以要注意所有csv
文件都是相同的格式。快乐的编码。
答案 1 :(得分:1)
我认为您需要创建一个大的DataFrame
append
所有df
到list
然后concat
首先:
dfs = []
path = "C:\\Users\\cam19\\Desktop\\New folder\\*.csv"
for fname in glob.glob(path):
df = pd.read_csv(fname, dtype=None, usecols=['logid'], low_memory=False)
dfs.append(df)
df = pd.concat(dfs)
然后使用value_counts
- 输出为Series
。因此2 column DataFrame
rename_axis
需要reset_index
:
counts = df['my_data'].value_counts().rename_axis('my_data').reset_index(name='count')
counts
counts = df.groupby('my_data').size().reset_index(name='count')
counts
答案 2 :(得分:0)
counts = df.loc['logid'].value_counts()