我一直收到警告“试图在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'
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[...]
。