将所有选定的值替换为熊猫中的NaN

时间:2018-06-19 16:17:46

标签: python pandas

我有一个df,看起来像:

test1   test2   test3   test_Date       test5
285685  0000105 0   2016-11-25 00:00:00 
285685  0000106 0   2016-11-25 00:00:00 
285685  0000107 1   2016-11-25 00:00:00 
Null    NULL    #N/A    #DIV/0!

我正在尝试填充如下内容:

test1   test2   test3   test_Date       test5
285685  0000105 NaN 2016-11-25 00:00:00 NaN
285685  0000106 NaN 2016-11-25 00:00:00 NaN
285685  0000107 1   2016-11-25 00:00:00 NaN
NaN     NaN     NaN     NaN        NaN  NaN

基本上试图替换0,'NA','NULL','#DIV / 0!','#VALUE','NaN','#N / A','#REF!','(空格)','0','Null'全部为NaN

使用下面的代码,我无法做到:

 f = dataframe.replace((0,'NA','NULL','#DIV/0!',' #VALUE','NaN','#N/A','#REF!',' ','0','Null'), np.nan).apply(lambda x: any(~x.isnull()))
 dataframe.loc[:,f]

我得到以下输出:

test1   test2   test3   test_Date
285685 0000105 0.0 2016-11-25 
285685 0000106 0.0 2016-11-25 
285685 0000107 1.0 2016-11-25 
Null   NaN        NaN NaT 

我正在丢失一列名为test5的列,并且这些值也都没有被替换。需要一些帮助。

先谢谢您。 :)

2 个答案:

答案 0 :(得分:4)

如果要从csv文件读取此文件,请使用na_values参数。查看文档:{​​{3}}

read_csv(
    ...,
    na_values=[0,'NA','NULL','#DIV/0!',' #VALUE','NaN','#N/A','#REF!',' ','0','Null'],
    ...
)

答案 1 :(得分:3)

在方括号中使用要替换的值而不是括号,并在末尾省略.apply

>>> df
    test1  test2  test3            test_Date test5
0  285685  105.0    0.0  2016-11-25 00:00:00      
1  285685  106.0    0.0  2016-11-25 00:00:00      
2  285685  107.0    1.0  2016-11-25 00:00:00      
3    Null    NaN    NaN              #DIV/0!     

>>> df.replace([0,'NA','NULL','#DIV/0!',' #VALUE','NaN','#N/A','#REF!',' ','0','Null'], np.nan)
    test1  test2  test3            test_Date  test5
0  285685  105.0    NaN  2016-11-25 00:00:00    NaN
1  285685  106.0    NaN  2016-11-25 00:00:00    NaN
2  285685  107.0    1.0  2016-11-25 00:00:00    NaN
3     NaN    NaN    NaN                  NaN    NaN