Python 使用导致内存错误的嵌套循环分配

Python 使用导致内存错误的嵌套循环分配,python,pandas,nested,Python,Pandas,Nested,我正在使用pandas,并尝试使用嵌套循环来完成作业。我迭代一个数据帧,然后运行一个距离函数,如果它满足某个条件。我面临两个问题: 使用CopyWarning设置: 试图在数据帧切片的副本上设置值 内存错误。它不适用于大型数据集。我最终不得不终止这个过程 我应该如何更改我的解决方案以确保它可以扩展到60000行的更大数据集 for i, row in df.iterrows(): listy = 0 school = [] if row['LS_Type'] == 'Pr

我正在使用pandas,并尝试使用嵌套循环来完成作业。我迭代一个数据帧,然后运行一个距离函数,如果它满足某个条件。我面临两个问题:

  • 使用CopyWarning设置: 试图在数据帧切片的副本上设置值

  • 内存错误。它不适用于大型数据集。我最终不得不终止这个过程

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

    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
    
    df.iterrows()中的i行的
    :
    listy=0
    学校=[]
    如果行['LS_Type']='Primary(1-4)':
    a=行['Northing']
    b=行['Easting']
    LS_ID=行['LS_ID']
    对于j,df.iterrows()中的第2行:
    如果第2行['LS_Type']=='Primary(1-8)':
    距离公里=距离(a、b、测向北[j]、测向东[j])
    如果(listy==0):
    listy=距离公里
    school.append([df.LS_Name[j],df.LS_ID[j]]))
    其他:
    如果距离公里<列表:
    listy=距离公里
    学校[0]=[df.LS\u Name[j],int(df.LS\u ID[j])]
    df['dist\u up\u prim'][i]=listy
    df[“最接近的”][i]=学校[0]
    其他:
    df['dist\u up\u 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)
    
    导入数学
    作为pd进口熊猫
    从functools导入部分
    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(世界其他地区):
    
    如果行['A'],通常应使用df.apply函数,如果使用ItErrors。。。停下来,做点别的。我下面的回答帮你解决这个问题了吗?