【问题标题】:Extract Number from Varying String从不同的字符串中提取数字
【发布时间】:2016-06-05 04:59:40
【问题描述】:

给定这个数据框:

import pandas as pd

df = pd.DataFrame({'ID':['a','b','c','d','e','f','g','h','i','j','k'],
                   'value':['None',np.nan,'6D','7','10D','NONE','x','10D aaa','1 D','10 D aa',7]
                   })
df


    ID  value
0   a   None
1   b   NaN
2   c   6D
3   d   7
4   e   10D
5   f   NONE
6   g   x
7   h   10D aaa
8   i   1 D
9   j   10 D aa
10  k   i7D

对于如上所示的任何混乱情况,我想提取存在的数字,否则返回 0。

想要的结果是:

    ID  value
0   a   0
1   b   0
2   c   6
3   d   7
4   e   10
5   f   0
6   g   0
7   h   10
8   i   1
9   j   10
10  k   7

提前致谢!

【问题讨论】:

  • 我会这样做:pd.to_numeric(df.value.str.replace(r'\D+',''), errors='coerce').fillna(0).astype(int)

标签: python string python-3.x pandas


【解决方案1】:

这是我使用re.findallapply的方法

df['value'].apply(lambda x: 0 if not re.findall('\d+', str(x)) else re.findall('\d+', str(x))[0])

【讨论】:

    【解决方案2】:

    使用Series.str.replacefillna 尝试以下操作:

    import pandas as pd
    
    df = pd.DataFrame({'ID':['a','b','c','d','e','f','g','h','i','j','k'],
                       'value':['None',np.nan,'6D','7','10D','NONE','x','10D aaa','1 D','10 D aa',7]
                       })
    
    df = df.fillna(0)
    df = df.str.replace(r'\D+', '').astype(int)
    

    【讨论】:

      【解决方案3】:

      或者,您可以在EAFP principle 之后通过applymap() 将函数应用于数据帧,在提取数字时捕获多个异常:

      def get_number(item):
          try:
              return int(re.search(r"\d+", str(item)).group(0))
          except (AttributeError, ValueError, IndexError):
              return 0
      
      print(df.applymap(get_number))
      

      打印:

          ID  value
      0    0      0
      1    0      0
      2    0      6
      3    0      7
      4    0     10
      5    0      0
      6    0      0
      7    0     10
      8    0      1
      9    0     10
      10   0      7
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-27
        • 1970-01-01
        相关资源
        最近更新 更多