Python pandas: chunksize 是如何工作的?

Python pandas: how does chunksize works?

我有以下代码:

from numpy import dtype
import pandas as pd
import os
import sys

inputFile='data.json'
chunks = pd.read_json(inputFile, lines=True, chunksize = 1000)
original_stdout = sys.stdout

i = 1

for c in chunks:
    location = c.location.str.split(',')
    for b in range(1000):
        print(location[b])
        if not type(location[b]) == float:
            # get the country name
            country = location[b][-1]
        else:
            country = 'unknown'

我正在从包含 json 个对象的大文件中提取位置字段。因为文件太大,我把它分成了 1000 行的块。我循环遍历每个块并检索我需要的信息:

for c in chunks:
    location = c.a.str.split(',')
    for b in range(1000):
        print(location[b])

在第一次迭代期间一切顺利。在第二次迭代时,行:

print(location[b])

报错:

ValueError: 0 is not in range

我如何循环处理第一个之后的大块?

感谢您的帮助

问题是,通过执行 location[b],您正在通过索引 访问 location 框架 (即,您在这里要求具有索引值 b)。块将正确地遵循索引,这意味着第一个块的索引将从 0 开始,第二个块将以 1000 开始,依此类推。这意味着,索引 0 将仅包含在第一个块中。

因此,您需要迭代没有索引的行:

for row in location:
   # Do something.

事实上,如果您查看错误的完整跟踪,您可能还会在 ValueError.

下方看到一个 KeyError

要迭代系列并获得索引,您可以使用 Series.iteritems():

for idx, row in a.iteritems():
   # Do something...