熊猫在巨大的csv的每一列中找到独特元素的数量

Posted

技术标签:

【中文标题】熊猫在巨大的csv的每一列中找到独特元素的数量【英文标题】:pandas find number of unique elements in each column of huge csv 【发布时间】:2015-04-17 13:57:04 【问题描述】:

我有一个大约 10 GB 的巨大 csv 文件,如果我尝试加载到内存中会出现错误。

我需要计算数据框每一列的唯一元素数。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

您可以依次加载每个列,然后调用.nunique

In [227]:

import io
t="""a,b,c
0,1,1
0,2,1
1,3,1
2,4,1
3,5,6"""
# get the columns first
cols = pd.read_csv(io.StringIO(t), nrows=1).columns
​
d = 
for col in cols:
    df = pd.read_csv(io.StringIO(t), usecols=col)
    d[col] = df[col].nunique()
d
Out[227]:
'a': 4, 'b': 5, 'c': 2

这应该会生成每列唯一值数量的字典

这假设您可以处理一次从 10GB 文件中加载一列

【讨论】:

我试图这样做,但加载每一列的时间很长,我有 2000 列 :( 嗯,你可以一次通过 100 列或其他东西 我知道可以分块读取数据帧。我想知道是否可以在仅部分读入内存的数据帧上使用apply_along_axis 你可以使用分块,但它会更复杂,因为我猜你必须为每一列使用一个计数器,为每个块使用+=。我认为一次阅读 100 列应该不会太糟糕,但我没有你的数据 你做不到df.nunique()!!

以上是关于熊猫在巨大的csv的每一列中找到独特元素的数量的主要内容,如果未能解决你的问题,请参考以下文章

如何为熊猫数据框的每一列应用具有不同时间常数的一阶过滤器?

根据值的数量将熊猫列拆分为多个单独的列[重复]

sql将查询结果插入到表的每一列中

如何有效地计算另一列中每个元素的较大元素的数量?

如何有效地计算另一列中每个元素的较小元素的数量?

将大熊猫数据帧的每一列与同一数据帧的每一列相乘的最有效方法