为什么我使用 pandas 读取 csv 文件的对象是 TextFileReader 对象

问题描述 投票:0回答:4

我使用 pandas 读取了 csv 文件:

data_raw = pd.read_csv(filename, chunksize=chunksize)
print(data_raw['id'])

然后,报TypeError:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'TextFileReader' object has no attribute '__getitem__'

我可以做什么来解决这个问题?如何将 data_raw 更改为 dataFrame 对象? 我使用 python2.7 和 pandas v0.19.1

python pandas
4个回答
21
投票

当您将

chunksize
选项传递给
read_csv()
时,它会创建一个
TextFileReader
读取器 - 一个类似打开文件的对象,可用于分块读取原始文件。请参阅此处的用法示例:如何使用 pandas 读取 6 GB csv 文件 当未提供此选项时,该函数确实读取文件内容。


18
投票

解决此问题的一种方法是在

nrows
函数中设置
pd.read_csv()
参数,这样您就可以选择要加载到数据框中的数据子集。当然,缺点是您将无法查看和使用完整的数据集。代码示例:

data = pd.read_csv(filename, nrows=100000)

1
投票

您可以将 TextFileReader 转换为 Dataframe。对于小数据,请使用:

df = pd.concat(MyTextFileReader, ignore_index=True)

参见 如何在不连接的情况下读取 Python 数据框中的数据?,也是大数据的解决方案。


0
投票

将 chunksize 传递给 read_csv 创建一个“块”的迭代器,即需要单独处理的 TextFileReader。

像这样-

df_chunks:TextFileReader = pd.read_csv(csv_file_path, sep=',', engine='python', dtype='unicode', chunksize=chunk_size)

for chunk in df_chunks:
    # do something with chunk.
    # chunk is dataframe
© www.soinside.com 2019 - 2024. All rights reserved.