gpt4 book ai didi

python - 如何解决由于 Pandas 中的 block 大小引起的错误?

转载 作者:行者123 更新时间:2023-11-28 22:26:13 26 4
gpt4 key购买 nike

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

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_csv 调用,在这种情况下,没有返回 DataFrame 对象。相反,它返回 TextFileReader对象,这是一个 iterator .本质上,这是因为当您将 iterator 参数设置为 True 时,返回的不是 DataFrame;它是 DataFrame 对象的 迭代器,每个对象的大小都是传递给 chunksize 参数的整数大小(在本例中为 1000000)。具体到您的情况,您不能只调用 df.index 因为简单地说, iterator 对象没有 index 属性。这并不意味着您不能访问 iterator 内的 DataFrames。这意味着您要么必须遍历迭代器一次访问一个 DataFrame,要么必须使用某种方式连接所有这些 DataFrame变成一个巨大的。

如果您考虑一次只使用一个 DataFrame,那么您需要执行以下操作来打印每个 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 参数,因此我假设您担心内存问题。因此,第一个策略会更好。这基本上意味着您正在利用 迭代器 在大型数据集的内存管理方面提供的优势。

我希望这证明是有用的。

关于python - 如何解决由于 Pandas 中的 block 大小引起的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44988406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com