首页 > 解决方案 > 如何在python中迭代非常大的数据框?

问题描述

我有一个代码,我的数据框包含近 800k 行,因此无法使用标准方法对其进行迭代。我搜索了一下,看到了 iterrows() 的方法,但我不明白如何使用。基本上这是我的代码,你能帮我如何为 iterrows() 更新它吗?

**

for i in range(len(x["Value"])):
    if x.loc[i ,"PP_Name"] in ['ARK','DGD','KND','SRG','HCO','MNG','KSK','KOP','KVB','Yamanli','ÇBS','Dogancay'] :
        x.loc[i,"Santral_Type"] = "HES"
    elif x.loc[i ,"PP_Name"] in ['BND','BND2','TFB','TFB3','TFB4','KNT']:
        x.loc[i,"Santral_Type"] = "TERMIK"
    elif x.loc[i ,"PP_Name"] in ['BRS','ÇKL','DPZ']:
        x.loc[i,"Santral_Type"] = "RES"
    else :  x.loc[i,"Santral_Type"] = "SOLAR"

**

标签: pythonpandasdataframeiterationrow

解决方案


如何迭代非常大的数据帧——一般来说,你不需要. 您应该对整个列使用某种矢量化操作。例如,您的案例可以是mapand fillna

map_dict = {
    'HES' : ['ARK','DGD','KND','SRG','HCO','MNG','KSK','KOP','KVB','Yamanli','ÇBS','Dogancay'],
    'TERMIK' : ['BND','BND2','TFB','TFB3','TFB4','KNT'],
    'RES' : ['BRS','ÇKL','DPZ']
}

inv_map_dict = {x:k for k,v in map_dict.items() for x in v}

df['Santral_Type'] = df['PP_Name'].map(inv_map_dict).fillna('SOLAR')

推荐阅读