【问题标题】:Remove strings and special characters from multiple columns从多列中删除字符串和特殊字符
【发布时间】:2021-08-18 14:33:17
【问题描述】:

我想从多个列(包含nan 值)中删除字符串和特殊字符。我只希望数字存在。下面是我的专栏之一。任何帮助将不胜感激!

    OTHER
    0   $300.00
    1   $850.00
    2   $550.00
    3   nan
    4   $1,250.00
    5   $81.00

预期结果:

    OTHER
    0   300.00
    1   850.00
    2   550.00
    3   
    4   1250.00
    5   81.00

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    要删除 nan,您可以使用此指令

    df.fillna(0)
    

    要删除字符 $ 你可以使用这个:

    df[other] = df[other].replace({'$':''},regex=True)
    print (df)
    

    【讨论】:

      【解决方案2】:

      首先用空字符串填充NaN值,然后用regex提取值,然后填充NaN值,最后用空字符串替换逗号。

      >>> (df['OTHER'].fillna('')
          .astype(str)
          .str.extract('(\d+(?:,\d+)?(?:\.\d+)?)', expand=False)
          .fillna('')
          .str.replace(',',  ''))
      
      0     300.00
      1     850.00
      2     550.00
      3           
      4    1250.00
      5      81.00
      Name: OTHER, dtype: object
      

      但是对于上述数据,以下也应该可以正常工作,即只取数字或小数点.的值:

      >>>(df['OTHER']
          .fillna('')
          .astype(str)
          .apply(lambda x: ''.join(i for i in x if i.isdigit() or i=='.')))
      
      0     300.00
      1     850.00
      2     550.00
      3           
      4    1250.00
      5      81.00
      Name: OTHER, dtype: object
      

      要在多个列上做同样的事情,试试这个:

      for col in df:
          df[col] = df[col]....#rest of the code from any of above two method
      

      【讨论】:

      • 第二种方法不会应用实际数据帧中的更改。也许有一个inplace = True 参数要指定?
      • 以上是为了打印目的,您需要将其分配回列。将其分配给df['OTHER']
      • 是的,我真傻!它工作谢谢!但是,如果我有多个列(比如 20 列),那么对每一列都执行此操作会变得乏味。有什么解决办法吗?
      • 只需为每一列运行一个循环,然后将其分配给列
      • 我以不同的方式做到了。首先,我使用iloc 函数来获取包含所需列的数据框。然后我执行了上述步骤来删除字符串和特殊字符。然后我终于连接了两个数据框。
      猜你喜欢
      • 1970-01-01
      • 2011-04-11
      • 2016-01-23
      • 2021-10-16
      • 2014-08-17
      相关资源
      最近更新 更多