Pandas fillna函数的行为不符合预期
我正在研究这个标题,并试图根据该标题的年龄中位数来估算年龄列。例如,职称主管的年龄中位数为3.5岁。对于标题等于Master且缺少年龄的所有行,我们将计算3.5。下面是我的代码: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
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