在 Pandas 中用 .loc 覆盖 Nan 值
Overwriting Nan values with .loc in Pandas
我尝试使用以下代码行来解决所需的任务:
df['Age'][np.isnan(df["Age"])] = rand1
但这会引发 "SettingWithCopyWarning",我认为使用 .loc
功能在数据帧(第 'Age' 列)中定位 Nan 值可能是更好的方法。
我已经看过 documentation,但仍然不知道如何解决这个问题。 .loc
也无法在此处找到任何解决方案。
如果有任何提示和建议,我将不胜感激。
您需要 fillna
才能将 NaN
替换为某个值:
df.Age = df.Age.fillna(rand1)
你的解决方案loc
:
df.loc[np.isnan(df["Age"]), 'Age'] = rand1
#same as
#df.loc[df["Age"].isnull(), 'Age'] = rand1
您还可以查看 indexing view versus copy。
样本:
df = pd.DataFrame({'Age':[20,23,np.nan]})
print (df)
Age
0 20.0
1 23.0
2 NaN
rand1 = 30
df.Age = df.Age.fillna(rand1)
print (df)
Age
0 20.0
1 23.0
2 30.0
#if need cast to int
df.Age = df.Age.fillna(rand1).astype(int)
print (df)
Age
0 20
1 23
2 30
我尝试使用以下代码行来解决所需的任务:
df['Age'][np.isnan(df["Age"])] = rand1
但这会引发 "SettingWithCopyWarning",我认为使用 .loc
功能在数据帧(第 'Age' 列)中定位 Nan 值可能是更好的方法。
我已经看过 documentation,但仍然不知道如何解决这个问题。 .loc
也无法在此处找到任何解决方案。
如果有任何提示和建议,我将不胜感激。
您需要 fillna
才能将 NaN
替换为某个值:
df.Age = df.Age.fillna(rand1)
你的解决方案loc
:
df.loc[np.isnan(df["Age"]), 'Age'] = rand1
#same as
#df.loc[df["Age"].isnull(), 'Age'] = rand1
您还可以查看 indexing view versus copy。
样本:
df = pd.DataFrame({'Age':[20,23,np.nan]})
print (df)
Age
0 20.0
1 23.0
2 NaN
rand1 = 30
df.Age = df.Age.fillna(rand1)
print (df)
Age
0 20.0
1 23.0
2 30.0
#if need cast to int
df.Age = df.Age.fillna(rand1).astype(int)
print (df)
Age
0 20
1 23
2 30