我不断收到警告“试图在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'
答案 0 :(得分: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'
第genderList = myDataFrame.loc[:,"Gender"]
行会发出警告,因为您正在分配数据框的一部分,这可能会导致复制,因此更新可能不会应用于原始数据框。在上面的代码中,我使用了itertuples
方法,这是一种更“正确”的方法来遍历熊猫中的行。如果要对特定行执行某项操作,则确实需要先创建其中的一部分-您只需更新每一行中该列的值即可。
据我所知,您的目标是根据先前的值替换Gender上的值。在这种情况下,我建议检查熊猫的replace
方法(正是出于这个原因)与filter
一起使用。但是,由于您的过滤器非常简单,因此您可以执行以下操作:
myDataFrame[myDataFrame["Gender"].str.contains('^f')] = "Female"
更新所有女性。我使用了数据帧(myDataFrame[...]
)的切片,条件是myDataFrame["Gender"].str.contains('^f')
。