小编典典

使用大csv(iterate和chunksize)的pandas结构

python

我有一个很大的csv文件,大约600mb,有1100万行,我想创建统计数据,例如数据透视图,直方图,图形等。显然,试图正常读取它是:

df = pd.read_csv('Check400_900.csv', sep='\t')

不起作用,所以我在类似的帖子中发现了迭代和块大小,所以我使用了

df = pd.read_csv('Check1_900.csv', sep='\t', iterator=True, chunksize=1000)

一切都很好,例如,我可以print df.get_chunk(5) 只搜索整个文件

for chunk in df:
    print chunk

我的问题是我不知道如何在整个df中使用以下这些东西,而不仅仅是一个

plt.plot()
print df.head()
print df.describe()
print df.dtypes
customer_group3 = df.groupby('UserID')
y3 = customer_group.size()

我希望我的问题不要那么混乱


阅读 212

收藏
2021-01-20

共1个答案

小编典典

解决方案,如果需要一次创建一个大文件,DataFrame如果需要一次处理所有数据:

然后将concat用于df的所有块,因为函数的输出类型为:

df = pd.read_csv('Check1_900.csv', sep='\t', iterator=True, chunksize=1000)

是不是数据帧,而是pandas.io.parsers.TextFileReader-

tp = pd.read_csv('Check1_900.csv', sep='\t', iterator=True, chunksize=1000)
print tp
#<pandas.io.parsers.TextFileReader object at 0x00000000150E0048>
df = pd.concat(tp, ignore_index=True)

我认为有必要在函数中添加参数忽略索引concat,因为避免了索引的重复。

编辑:

但是如果要处理诸如聚合之类的大数据,最好使用dask,因为它提供了高级并行性。

2021-01-20