【问题标题】:Separate letters and digits using regex with pandas使用带有熊猫的正则表达式分隔字母和数字
【发布时间】:2018-07-31 15:05:17
【问题描述】:

我有一个来自 pandas 数据框 df 的名为“值”的列,其中包含数字和单词。它看起来像这样:

   VALUE
0   done
1   Yes
2   3.45
3   2bc

我想将列拆分为 2 列,其中左侧只有字母,右侧只有数字。理想情况下,结果应该是:

     0    1
0   done NaN
1   Yes  NaN
2   NaN  3.45
3   bc   2

我尝试像这样使用 .str.extract 熊猫函数:

df['value'].str.extract('([A-Za-z]+)?([0-9]*[.]?[0-9]+)')

我得到的结果类似于以下:

    0    1
0   NaN NaN
1   NaN NaN
2   NaN 3.45
3   NaN NaN

这些词没有按应有的方式出现在第 0 列中。

有谁知道在 pandas/python 中进行这种操作的原因或更好的方法吗?

【问题讨论】:

  • 这很快就会变得一团糟。如果一个字符串中间有一个数字会发生什么,例如1b3 ?
  • 对于您的具体示例,将+ 更改为*,例如df['value'].str.extract('([A-Za-z]+)?([0-9]*[.]?[0-9]*)')

标签: python regex string pandas


【解决方案1】:

修正你的模式,并使用str.extractall:

(df.VALUE.str.extractall('(\d+(?:\.\d+)?)|([^\d.]+)')
   .unstack()
   .groupby(level=0, axis=1)
   .first())

      0     1
0   NaN  done
1   NaN   Yes
2  3.45   NaN
3     2    bc

【讨论】:

    猜你喜欢
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2016-12-31
    • 2021-08-22
    相关资源
    最近更新 更多