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

熊猫在巨大的csv的每一列中找到许多独特的元素,csv,pandas,bigdata,Csv,Pandas,Bigdata,我有一个10 GB左右的巨大csv文件,如果我试图加载到内存中,就会出错 我需要为数据帧的每一列计算唯一元素的数量。我该怎么做 您可以依次加载每个列,然后调用.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

我有一个10 GB左右的巨大csv文件,如果我试图加载到内存中,就会出错


我需要为数据帧的每一列计算唯一元素的数量。我该怎么做

您可以依次加载每个列,然后调用
.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}
然后,这将为每列生成唯一值数量的dicts


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

我正试图这样做,但加载每列的时间非常长,我有2000列:(好的,你可以一次100列或者其他什么的,我知道可以分块读取数据帧。我想知道是否可以在只部分读取到内存中的数据帧上使用
apply___轴
。你可以使用分块,但它会更复杂,因为你必须使用计数器来读取数据帧。)我猜每一列和每一块的
+=
。我认为一次读100列应该不会太糟糕,但我没有你的数据,直到让我惊讶的是你不能做
df.nunique()
!!