同时为多个列替换N / A的缺失值

时间:2018-04-23 18:39:11

标签: python-3.x pandas lambda missing-data

我想用'N / A'替换列的缺失值(或空白'')。我尝试了下面的代码,但可能犯了一些错误或没有使用正确的方法。

df2['test_edited'] = df2['test'].map(lambda x: 'N/A' if x.empty() )

df2['test_edited'] = df2['test'].map(lambda x: 'N/A' if x == ' ' )

这是我看到的错误: SyntaxError:语法无效

我以前尝试过的: 我之前使用过if-else和lambda,可能这是更标准的方法,但在这种特殊情况下我只想要一个If-Then语句类型的用法。因为我只需要替换空白或缺失值,但保持列的其他值不变。例如,在下面的示例中,我想将年龄42替换为0,但我希望保持其他年龄值不变,如果您使用if-else语句则无效

enter image description here

dfx['Age'] = dfx['Age'].map(lambda x: '0' if x == 42 else 1)

enter image description here

所以我的问题是: 1.是否可以在lambda中仅使用If-then类型的语句 2.如何同时在多个列上执行相同的操作?例如,在下面的例子中,如果我有test1 test2 test3等,我想在一行中处理所有这些。

缺失的值基本上是空白的,看起来像这样

enter image description here

2 个答案:

答案 0 :(得分:0)

要填充缺失值,我们一般使用.fillna

对于单个列,如此:

df2['test_edited'] = df2['test'].fillna('N/A')

如果您有多个列并想要复制每个列,其中NaN值被替换为'N / A',正如Yilun Zhang在他的回答中所写,您可以同时在多个列上使用fillna作为好。

col_list = ['test', 'customer']
nan_replaced = ['test_edited', 'customer_edited']
df[nan_replaced] = df[col_list].fillna('N/A') 

答案 1 :(得分:0)

您只需定义要填充缺失值的列列表,然后在该子集上应用fillna

fill_list = ["A", "B", "C"]
df2[fill_list] = df2[fill_list].fillna("N/A")