【问题标题】:Substitute all floats for a single character in pandas用所有浮点数替换熊猫中的单个字符
【发布时间】:2020-10-13 02:14:16
【问题描述】:

我有一个数据框,其中大部分是日期作为列。

例如:

  Names 01/04/2020 02/04/2020...
0 Name1        1.0        NaN
1 Name2        2.0        8.0
...

我想用所有这些浮点数替换字符“P”

例如:

  Names 01/04/2020 02/04/2020...
0 Name1          P        NaN
1 Name2          P          P
...

我尝试过使用 iloc,但没有成功:

df.iloc[:,1:][df.iloc[:, 1:] >=1] = 'P'

有什么想法吗?

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    试试maskto_numeric

    df = df.mask(df.apply(lambda x : pd.to_numeric(x,errors='coerce')).notnull(),'P')
    df
    Out[19]: 
       Names 01/04/2020 02/04/2020...
    0  Name1          P           NaN
    1  Name2          P             P
    

    【讨论】:

      【解决方案2】:

      您能否尝试关注,写在移动设备上,所以还不能测试,但我相信应该可以工作。

      import pandas as pd
      df.replace(regex=r'([0-9]{1,})?\.[0-9]{1,}$', value='P')
      

      【讨论】:

      • [0-9]{1,} 可以替换为[0-9]+\d+
      【解决方案3】:

      如果数字已经是字符串;

      df.replace(regex=r'\d\.\d+', value='P')
      

      如果数字是dtype float;

      df.astype(str).replace(regex=r'\d\.\d+', value='P')
      
           Names  01/04/2020 02/04/2020
      0  Name1          P           nan
      1  Name2          P             P
      

      【讨论】:

        【解决方案4】:

        有两种方法可以解决这个问题。您可以将所有变量转换为字符串并使用替换功能。或者您可以尝试使用掩码获取所有浮点值,然后将其替换为值P。这会更容易识别。

        方法一

        df.applymask(str).replace("^\s*[-+]?[0-9]*\.?[0-9]*\s*$",'P')
        
        

        方法二

        def find_float(x):
            try:
                float(x)
                return True
            except:
                return False
        
        # Had to fill NA values with 'None' because default NA, numpy.NaN is also a float value.
        
        mask = df.fillna('None').applymap(find_float)
        
        df.where(mask,'P')
        
        

        【讨论】:

          猜你喜欢
          • 2021-01-09
          • 2020-10-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-11
          • 2019-04-24
          • 2014-10-31
          • 2020-05-13
          • 2017-03-12
          相关资源
          最近更新 更多