首页 > 解决方案 > 替换单列熊猫中的行值

问题描述

我不断收到警告“试图在 DataFrame 的切片副本上设置一个值”。我该如何解决?任何替代品

 //check for NAN
 //capitalise first letter
//assign 'Male' for 'm',
//assign 'Female for 'f'

myDataFrame.to_csv('new_H.csv')
genderList = myDataFrame.loc[:,"Gender"] //extract Gender column

for i in range(0, len(genderList)):

    if type(genderList[i]) == float:   #check for empty spaces
         genderList[i] = 'NAN'
    elif genderList[i].startswith('f'):
          genderList[i] = 'Female'    
    elif genderList[i].startswith('m'):
          genderList[i] = 'Male'    

标签: python-3.xpandas

解决方案


for row in myDataFrame.itertuples():
    if type(row["Gender"]) == float:
        row["Gender"] = 'NAN'
    elif row["Gender"].startswith('f'):
        row["Gender"] = 'Female'
    elif row["Gender"].startswith('m'):
        row["Gender"] = 'Male'

该行genderList = myDataFrame.loc[:,"Gender"]会导致警告,因为您正在分配一个数据框,这可能会导致复制,因此更新可能不会应用于原始数据框。在上面的代码中,我使用itertuples了一种更“正确”的方法来遍历 pandas 中的行。如果您想对特定行执行操作,您确实需要先创建一个切片 - 您只需更新每一行中该列的值。

据我所知,您的目标是根据以前的值替换 Gender 上的值。在这种情况下,我建议检查replace出于该确切原因而制作的 pandas 方法以及filter. 但是,由于您的过滤器非常简单,您可以执行以下操作:

myDataFrame[myDataFrame["Gender"].str.contains('^f')] = "Female"

更新所有女性。我使用了数据帧()的切片,myDataFrame[...]条件是myDataFrame["Gender"].str.contains('^f')


推荐阅读