Pandas 将chunksize参数用于方法pd.read_csv()时出现TypeError

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读

我有一个如下的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