如何解决由于pandas中的chunksize引起的错误?

时间:2017-07-08 16:33:37

标签: 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'

如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

这些错误源于这样一个事实:在这种情况下,pd.read_csv调用不会返回DataFrame个对象。相反,它返回TextFileReader对象,即iterator。这基本上是因为当您将iterator参数设置为True时,返回的内容不是DataFrame;它是iterator个DataFrame对象,每个对象都传递给chunksize参数的整数(在本例中为1000000)。 根据您的情况,您不能只调用df.index,因为简单地说,iterator对象没有index属性。这并不意味着您无法访问DataFrames内的iterator。这意味着您要么必须遍历迭代器以一次访问一个DataFrame,要么必须使用某种方式将所有DataFrames连接成一个巨大的DataFrame。 / p>

如果您考虑一次只使用一个DataFrame,那么您需要执行以下操作来打印每个file = "./data.csv" dfs = pd.read_csv(file, sep="/", header=0,iterator=True, chunksize=1000000, dtype=str) for df in dfs: print(df.index) # do something df.to_csv('output_file.csv', mode='a', index=False) 的索引:

DataFrames

这会将output_file.csv保存到名为mode的输出文件中。将a参数设置为DataFrame后,操作应附加到文件中。因此,不应该覆盖任何内容。

但是,如果您的目标是将所有DataFrame连接成一个巨型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) ,那么以下可能是更好的路径:

iterator

由于您已在此处使用iterators参数,因此我假设您关注内存。因此,第一个策略是更好的策略。这基本上意味着您正在利用{{1}}在大型数据集的内存管理方面所带来的好处。

我希望这证明有用。