【发布时间】:2020-09-07 22:01:08
【问题描述】:
我正在尝试构建一个批处理生成器,它将大型 Pandas DataFrame 作为输入,并将输出作为给定的行数(batch_size)。我在具有 10 行的较小数据框上进行了练习以使其正常工作。我遇到了生成器函数的问题,其中下面的 for 循环在练习数据帧上运行良好,并吐出指定的批量大小:
for i in range(0, len(df), 3):
lower = i
upper = i+3
print(df.iloc[lower:upper])
但是,尝试将其构建到生成器函数中被证明是困难的:
def Generator(batch_size, seed = None):
num_items = len(df)
x = df.sample(frac = 1, replace = False, random_state = seed)
for offset in range(0, num_items, batch_size):
lower_limit = offset
upper_limit = offset+batch_size
batch = x.iloc[lower_limit:upper_limit]
yield batch
不幸的是:
next(Generator(e.g.1))
一遍又一遍地返回同一行
我对这个工作还很陌生,我觉得我一定遗漏了一些东西,但是,我看不出是什么。 如果有人能指出可能是什么问题,我将不胜感激。
编辑: 数据框是预定义的,它是:
raw_data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy', 'Sarah', 'Gueniva', 'Know', 'Sara', 'Cat'],
'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze', 'Mornig', 'Jaker', 'Alom', 'Ormon', 'Koozer'],
'age': [42, 52, 36, 24, 73, 53, 26, 72, 73, 24],
'preTestScore': [4, 24, 31, 2, 3, 13, 52, 72, 26, 26],
'postTestScore': [25, 94, 57, 62, 70, 82, 52, 56, 234, 254]}
df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age', 'preTestScore', 'postTestScore'])
df
【问题讨论】:
-
您从不向您的生成器函数提供
df? -
您好,df 在生成器运行之前被预定义为 df,因此不需要将其指定给 Generator() 函数。我已添加 df 供您查看。
标签: python-3.x pandas debugging generator yield