使用Pandas(python)计算csv文件中的唯一ID

时间:2017-07-31 02:45:45

标签: python pandas csv

所以我现在有一个数据集,其中有一个名为' 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列?)提前感谢!

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所有dflist然后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

groupby并汇总size

counts = df.groupby('my_data').size().reset_index(name='count')
counts

答案 2 :(得分:0)

你可以试试这个。

counts = df.loc['logid'].value_counts()