使用大csv(iterate和chunksize)的pandas结构
问题内容:
我有一个很大的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()
我希望我的问题不要那么混乱
问题答案:
解决方案,如果需要一次创建一个大文件,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
,因为它提供了高级并行性。