代码之家  ›  专栏  ›  技术社区  ›  anky

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

  •  1
  • anky  · 技术社区  · 6 年前

    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
    

     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 
    

    提前谢谢。:)

    2 回复  |  直到 6 年前
        1
  •  3
  •   sacuL    6 年前

    在值列表中使用方括号代替括号,并省略 .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
    
        2
  •  4
  •   piRSquared    6 年前

    如果要从csv文件读取此文件,请使用 na_values https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

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