Python 如何用列名替换类别的fillna?
我有一个熊猫数据框,我想用“colname\u miss”字符串填充缺少的类别Python 如何用列名替换类别的fillna?,python,pandas,Python,Pandas,我有一个熊猫数据框,我想用“colname\u miss”字符串填充缺少的类别 def FillCatMissing(df): cols = ['A','B','C'] df[cols] = df[cols].fillna('miss') return df 这将用字符串“miss”填充所有缺少的类别,我需要像A列的“A_miss”一样,B列的“B_miss”一样…为什么不用替换应用: for col in df.columns: df[col].fillna(
def FillCatMissing(df):
cols = ['A','B','C']
df[cols] = df[cols].fillna('miss')
return df
这将用字符串“miss”填充所有缺少的类别,我需要像A列的“A_miss”一样,B列的“B_miss”一样…为什么不
用替换应用:
for col in df.columns:
df[col].fillna(col+'_miss', inplace=True)
def FillCatMissing(df):
cols = ['A','B','C']
df[cols] = df[cols].apply(lambda x: x.replace(np.nan, x.name + '_miss'))
return df
安装程序
将一个dict
传递给fillna
熊猫有一种特殊的方法来处理这个问题。您可以将字典传递给fillna
方法,该方法定义了用什么替换每列的空值,而不是在列上循环并分别填充每一列。换句话说,这是应该采取的方式
在这种情况下,您希望字典的键与要填充的列名匹配
df.fillna({k: f'{k}_miss' for k in df}) # This is the answer you are looking for
A B C
0 a B_miss C_miss
1 A_miss b C_miss
我们可以把它留给'A'
和'B'
df.fillna({k: f'{k}_miss' for k in ['A', 'B']})
A B C
0 a B_miss None
1 A_miss b None
这就只剩下列'C'
最后,这将生成一个带有结果的副本,而不是修改现有的数据帧。如果要覆盖现有的数据帧,只需将其指定给相同的名称即可
df = df.fillna({k: f'{k}_miss' for k in df})
虽然我显然更喜欢另一个答案,但这是另一种方法
df.fillna(df.columns.to_series().add('_miss'))
A B C
0 a B_miss C_miss
1 A_miss b C_miss
如果与熊猫相关,请添加相应的标签。
df.fillna(df.columns.to_series().add('_miss'))
A B C
0 a B_miss C_miss
1 A_miss b C_miss