在单列熊猫中替换行值

问题描述 投票:0回答:1

我一直收到警告“试图在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.x pandas
1个回答
1
投票
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'

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

据我所见,您的目标是根据先前的值替换Gender上的值。在这种情况下,我建议检查熊猫的itertuples方法和确切的原因,该方法与replace一起使用。但是,由于您的过滤器非常简单,因此您可以执行以下操作:

filter

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

© www.soinside.com 2019 - 2024. All rights reserved.