【问题标题】:Replace a string value with NaN in pandas data frame - Python在熊猫数据框中用 NaN 替换字符串值 - Python
【发布时间】:2019-05-09 03:42:35
【问题描述】:

我必须替换值吗?使用 NaN,因此您可以调用 .isnull () 方法。我找到了几种解决方案,但总是返回一些错误。假设:

data = pd.DataFrame([[1,?,5],[?,?,4],[?,32.1,1]])

如果我尝试:

pd.data.replace('?', np.nan)

我有:

     0     1  2
0  1.0   NaN  5
1  NaN   NaN  4
2  NaN  32.1  1    

但是 data.isnull() 返回:

       0      1      2
0  False  False  False
1  False  False  False
2  False  False  False

为什么?

【问题讨论】:

    标签: pandas dataframe missing-data


    【解决方案1】:

    我想你忘记分配回:

    data = pd.DataFrame([[1,'?',5],['?','?',4],['?',32.1,1]])
    
    data = data.replace('?', np.nan)
    #alternative
    #data.replace('?', np.nan, inplace=True)
    print (data)
         0     1  2
    0  1.0   NaN  5
    1  NaN   NaN  4
    2  NaN  32.1  1
    
    print (data.isnull())
           0      1      2
    0  False   True  False
    1   True   True  False
    2   True  False  False
    

    【讨论】:

      【解决方案2】:

      ?not 空值。所以你会期望在isnull 测试下得到一个False

      >>> data = pandas.DataFrame([[1,'?',5],['?','?',4],['?',32.1,1]])
      >>> data
                0      1      2
         0  False  False  False
         1  False  False  False
         2  False  False  False
      

      ? 替换为NaN 后,测试看起来会大不相同

      >>> data = data.replace('?', np.nan)
      >>> data
             0      1      2
      0  False   True  False
      1   True   True  False
      2   True  False  False
      

      【讨论】:

        【解决方案3】:
        # a dataframe with string values
        dat = pd.DataFrame({'a':[1,'FG', 2, 4], 'b':[2, 5, 'NA', 7]})
        

        从数据框中删除非数字元素:

        "Method 1 - with regex"
        dat2 = dat.replace(r'^([A-Za-z]|[0-9]|_)+$', np.NaN, regex=True)
        dat2
        

        "Method 2 - with pd.to_numeric"
        dat3 = pd.DataFrame()
        for col in dat.columns:
            dat3[col] = pd.to_numeric(dat[col], errors='coerce')
        dat3
        

        【讨论】:

          【解决方案4】:

          相信你在做pd.data.replace('?', np.nan)这个动作的时候没有到位,所以你一定要试试-

          data = data.replace('?', np.nan)
          

          【讨论】:

            猜你喜欢
            • 2020-12-20
            • 2018-03-25
            • 2021-03-22
            • 2014-07-07
            • 2021-09-07
            • 1970-01-01
            • 1970-01-01
            • 2015-08-04
            相关资源
            最近更新 更多