gpt4 book ai didi

python - 使用嵌套循环进行 Pandas 赋值会导致内存错误

转载 作者:太空宇宙 更新时间:2023-11-03 21:08:11 25 4
gpt4 key购买 nike

我正在使用 pandas 并尝试使用嵌套循环进行分配。我迭代数据帧,然后在满足特定条件时运行距离函数。我面临两个问题:

  1. 设置复制警告:尝试在 DataFrame 的切片副本上设置值

  2. 内存错误。它不适用于大型数据集。我最终不得不终止该过程。

我应该如何更改我的解决方案以确保它可以扩展到 60,000 行的更大数据集?

for i, row in df.iterrows():
listy = 0
school = []
if row['LS_Type'] == 'Primary (1-4)':
a = row['Northing']
b = row['Easting']
LS_ID = row['LS_ID']
for j, row2 in df.iterrows():
if row2['LS_Type'] == 'Primary (1-8)':
dist_km = distance(a,b, df.Northing[j], df.Easting[j])
if (listy == 0):
listy = dist_km
school.append([df.LS_Name[j], df.LS_ID[j]])
else:
if dist_km < listy:
listy = dist_km
school[0] = [df.LS_Name[j], int(df.LS_ID[j])]
df['dist_up_prim'][i] = listy
df["closest_up_prim"][i] = school[0]

else:
df['dist_up_prim'][i] = 0

最佳答案

双重 for 循环才是让你丧命的原因。看看是否可以将其分成两个单独的应用步骤。

这是一个使用 df.apply()partial 执行嵌套 for 循环的玩具示例:

import math
import pandas as pd
from functools import partial

df = pd.DataFrame.from_dict({'A': [1, 2, 3, 4, 5, 6, 7, 8],
'B': [1, 2, 3, 4, 5, 6, 7, 8]})

def myOtherFunc(row):
if row['A'] <= 4:

return row['B']*row['A']

def myFunc(the_df, row):
if row['A'] <= 2:
other_B = the_df.apply(myOtherFunc, axis=1)
return other_B.mean()
return pd.np.NaN

apply_myFunc_on_df = partial(myFunc, df)

df.apply(apply_myFunc_on_df, axis=1)

你可以用这种形式重写你的代码,这样会快得多。

关于python - 使用嵌套循环进行 Pandas 赋值会导致内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55262477/

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