使用熊猫在csv文件中计数唯一的ID(python)
问题描述:
所以我目前有一个数据集,它有一个名为'logid'的列,它由4位数字组成。我在我的csv文件中有大约200k行,我想统计每个独特的logid并输出它。使用熊猫在csv文件中计数唯一的ID(python)
Logid | #为每个唯一的ID #ofoccurences。所以它可能是1000 | 10表示在csv文件列'logid'中可以看到10次logid 1000。分隔符|没有必要,只是让你们更容易阅读。这是目前我的代码:
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列?)在此先感谢!
答
好的。从我的理解。我认为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
文件都是相同的格式。快乐的编码。
答
我想你需要创建一个大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
将提供您'csv'文件结构? –
它由64列(所有str值)和200k行组成,由int值组成。我只想看看标题为“logid”的第三行,但是对于所有200k行。他们是所有整数的100%。不知道你还有什么意思。 – Cameron
[使用熊猫搜索CSV文件(独特的ID) - Python](https://*.com/questions/45316031/searching-csv-files-with-pandas-unique-ids-python) – Paul