Python 如何解决pandas中由于chunksize导致的错误?

Python 如何解决pandas中由于chunksize导致的错误?,python,pandas,Python,Pandas,我正在尝试读取一个大的csv文件并运行代码。我使用块大小来做同样的事情 file = "./data.csv" df = pd.read_csv(file, sep="/", header=0,iterator=True, chunksize=1000000, dtype=str) print len(df.index) 我在代码中得到以下错误: AttributeError: 'TextFileReader' object has no attribute 'index' 如何解决此问题?

我正在尝试读取一个大的csv文件并运行代码。我使用块大小来做同样的事情

file = "./data.csv"
df = pd.read_csv(file, sep="/", header=0,iterator=True, chunksize=1000000, dtype=str)
print len(df.index)
我在代码中得到以下错误:

AttributeError: 'TextFileReader' object has no attribute 'index'

如何解决此问题?

这些错误源于这样一个事实:在本例中,pd.read\u csv调用不返回DataFrame对象。相反,它返回一个对象,它是一个。这本质上是因为当您将迭代器参数设置为True时,返回的不是数据帧;它是DataFrame对象的迭代器,每个对象的大小都是传递给chunksize参数的整数(在本例中为1000000)。 具体到您的情况,您不能只调用df.index,因为迭代器对象没有index属性。这并不意味着您不能访问迭代器内的数据帧。这意味着,您要么必须循环遍历迭代器,一次访问一个数据帧,要么必须使用某种方式将所有这些数据帧连接成一个巨大的数据帧

如果您正在考虑一次只处理一个数据帧,那么您需要执行以下操作来打印每个数据帧的索引:

这将数据帧保存到名为output_file.csv的输出文件中。模式参数设置为a时,操作应附加到文件中。因此,不应覆盖任何内容

但是,如果您的目标是将所有数据帧连接成一个巨大的数据帧,那么以下可能是更好的方法:

file = "./data.csv"
dfs = pd.read_csv(file, sep="/", header=0,iterator=True, chunksize=1000000, dtype=str)

giant_df = pd.concat(dfs)

print(giant_df.index)
因为您已经在这里使用了迭代器参数,所以我假设您关心的是内存。因此,第一种战略会更好。这基本上意味着您正在利用迭代器在大型数据集的内存管理方面提供的优势


我希望这证明是有用的。

上面的代码不可能抛出这些错误。请共享完整代码并进行回溯。此外,当您将迭代器参数设置为True时,返回的不是数据帧;它是数据帧的迭代器,每个数据帧的大小都是传递给chunksize参数的整数。基本上,您需要循环通过df变量来访问多个数据帧。您能详细解释一下吗?一旦您共享了更多代码和完整的回溯/错误,我很乐意。底线是:变量df不是数据帧。它是一个数据帧的集合。您可以通过循环遍历迭代器逐个访问数据帧。例如,我使用:print lendf.indexpress获得属性错误,请参阅我的答案。我还有一个疑问:我在这个forloop中运行一个代码,因为我使用chunksize,所以一开始只运行1000行。最后我保存了输出。每次选择一组1000行时,输出文件是否会被覆盖,或者输出文件是否会有完整输入的输出?是。我使用命令df将其保存回csv文件。有没有办法解决索引器错误:位置索引器超出范围??:@Iris请用引起错误的代码编辑你的问题。我正在阅读有多列浮点、字符串、日期等的表格。Read_csv在iterator=False时工作得很好,但在第6个块上可能会失败,并出现类型比较错误。如果使用reindex,它有时会记住旧索引。即使块操作是互斥的,但同样的代码在iterator=true时失败。我认为铸造或分块算法有问题。
file = "./data.csv"
dfs = pd.read_csv(file, sep="/", header=0,iterator=True, chunksize=1000000, dtype=str)

giant_df = pd.concat(dfs)

print(giant_df.index)