Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何用列名替换类别的fillna?_Python_Pandas - Fatal编程技术网

Python 如何用列名替换类别的fillna?

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(

我有一个熊猫数据框,我想用“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(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