我有一个来自 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/