python - 使用正则表达式和 pandas 分隔字母和数字

标签 python regex string pandas

我有一个来自 Pandas 数据框 df 的名为“value”的列,它混合了数字和单词。它看起来像这样:

   VALUE
0   done
1   Yes
2   3.45
3   2bc

我想将该列拆分为两列,其中左侧一列仅包含字母,右侧一列仅包含数字。理想情况下,结果应该是:

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

我尝试使用 .str.extract pandas 函数,如下所示:

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 中执行此类操作的原因或更好的方法吗?

最佳答案

修复您的模式,并使用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

关于python - 使用正则表达式和 pandas 分隔字母和数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48899041/

相关文章:

java - 如何仅匹配前面/后面没有字母字符的数字?

java字符串替换字符

C#:字符串拆分返回字符串列表和分隔符列表?

c - 如何编写更好的 strlen 函数?

python - pytest 2.3 在类中添加拆卸

python - 是否可以在 for 循环中使用 lambda 来实现此目的?

python - Google API Python 客户端错误

python - 如何使数据输入 StringIO 的顺序无关紧要? - Python

java - 在出现 n 个数字后拆分字符串

java - 时间正则表达式问题