Pandas fillna函数的行为不符合预期

Pandas fillna函数的行为不符合预期,pandas,fillna,Pandas,Fillna,我正在研究这个标题,并试图根据该标题的年龄中位数来估算年龄列。例如,职称主管的年龄中位数为3.5岁。对于标题等于Master且缺少年龄的所有行,我们将计算3.5。下面是我的代码: import pandas as pd df = pd.read_csv('train.csv', index_col=0) df_1 = df.copy() df_1.Age[df_1.Name.str.contains('master', case= False)].fillna(df.Age[df.Name

我正在研究这个标题,并试图根据该标题的年龄中位数来估算年龄列。例如,职称主管的年龄中位数为3.5岁。对于标题等于Master且缺少年龄的所有行,我们将计算3.5。下面是我的代码:

import pandas as pd

df = pd.read_csv('train.csv', index_col=0)

df_1 = df.copy()

df_1.Age[df_1.Name.str.contains('master', case= False)].fillna(df.Age[df.Name.str.contains('master', case=False)].median(), inplace = True)


上面的代码打印标题主数据的年龄,包括插补的年龄。但是,当整体打印df_1时,缺失的值再次出现。含义:插补不会影响内存中的df_1。

本质上,您不是在整个数据帧(
df_1
)中应用
.fillna()
),而是在它的切片上应用

df_1.Age[<filter condition>].fillna(..., inplace=True)

经过更多的尝试和错误后,我用这种方式修复了它:df_3.Age[df_3.Name.str.contains('master',case=False)]=df_3.Age[df_3.Name.str.contains('master',case=False)].fillna(df_2.Age[df_2.Name.str.contains('master',case=False)].median(),inplace=False)返回以下错误:试图在数据帧的切片副本上设置值。这会带来问题吗?
import pandas as pd

df = pd.read_csv('train.csv', index_col=0)

df_1 = df.copy()

median = df.Age[df.Name.str.contains('master', case=False)].median()

# find the missing age of row containing "master" (case-insensitive) in "Name" 
# and replace with the median age
condition = (df_1.Name.str.contains('master', case=False) & df_1.Age.isna())
df_1.loc[condition, "Age"] = median