Pandas 将chunksize参数用于方法pd.read_csv()时出现TypeError
我有一个如下的csv文件:Pandas 将chunksize参数用于方法pd.read_csv()时出现TypeError,pandas,Pandas,我有一个如下的csv文件: 1 1.1 0 0.1 13.1494 32.7957 2.27266 0.2 3 5.4 ... \ 0 2 2 0 8.17680 4.76726 25.6957 1.13633 0 3 4.8 ... 1 3 0 0 8.22718 2.35340 15.2934 1.13633 0 3 4.8 ... 使用panda.read\u csv读
1 1.1 0 0.1 13.1494 32.7957 2.27266 0.2 3 5.4 ... \
0 2 2 0 8.17680 4.76726 25.6957 1.13633 0 3 4.8 ...
1 3 0 0 8.22718 2.35340 15.2934 1.13633 0 3 4.8 ...
使用panda.read\u csv读取文件:
data_raw = pd.read_csv(filename, chunksize=chunksize)
现在,我想制作一个数据帧:
df = pd.DataFrame(data_raw, columns=['id', 'colNam1', 'colNam2', 'colNam3',...])
但我遇到了一个问题:
File "test.py", line 143, in <module>
data = load_frame(csvfile)
File "test.py", line 53, in load_frame
'id', 'colNam1', 'colNam2', 'colNam3',...])
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 325, in __init__
raise TypeError("data argument can't be an iterator")
TypeError: data argument can't be an iterator
文件“test.py”,第143行,在
数据=加载帧(csvfile)
文件“test.py”,第53行,在load_框架中
“id”、“colNam1”、“colNam2”、“colNam3”、…])
文件“/usr/local/lib/python2.7/dist packages/pandas/core/frame.py”,第325行,在__
raise TypeError(“数据参数不能是迭代器”)
TypeError:数据参数不能是迭代器
我不知道为什么。这是因为当您将
chunksize
作为参数传递到read\u csv
时,返回的是一个iterable,而不是df本身
证明:
In [67]:
import io
import pandas as pd
t="""a b
0 -0.278303 -1.625377
1 -1.954218 0.843397
2 1.213572 -0.098594"""
df = pd.read_csv(io.StringIO(t), chunksize=1)
df
Out[67]:
<pandas.io.parsers.TextFileReader at 0x7e9e8d0>
您的原始问题的想法是,您需要对其进行迭代,以获得块:
In [73]:
for r in df:
print(r)
a b
0 0 -0.278303 -1.625377
a b
1 1 -1.954218 0.843397
a b
2 2 1.213572 -0.098594
如果要从块中生成df,需要附加到列表中,然后调用concat
:
In [77]:
df_list=[]
for r in df:
df_list.append(r)
pd.concat(df_list)
Out[77]:
a b
0 0 -0.278303 -1.625377
1 1 -1.954218 0.843397
2 2 1.213572 -0.098594
谢谢但是,如果我想将数据放入数据帧,我该怎么做呢?这台计算机的内存只有3GB。非常感谢。我想从块中生成df。我使用了你的df_列表代码。但由于内存已满,进程被终止。我电脑的内存只有3GB。但是CSV文件超过3GB。你有答案吗?嗯,你需要更多的RAM或你需要考虑热处理CSV脱机。你不能打破这里的物理定律,如果你没有足够的RAM,那么你需要处理文件的块或考虑你真正需要加载在RAMCAN你给一些具体的例子,在我目前的情景?如何从区块或csv离线中获取df?谢谢。对不起,这是一个不同的问题,你应该接受我的答案并发布一个新的问题,关键是你需要在你的问题中包括你试图做什么,因为你可能能够离线处理csv或减少内存占用,但这对我来说是一个单独的问题
In [77]:
df_list=[]
for r in df:
df_list.append(r)
pd.concat(df_list)
Out[77]:
a b
0 0 -0.278303 -1.625377
1 1 -1.954218 0.843397
2 2 1.213572 -0.098594