我有一个 df,其中一列如下所示:
**Share**
We are safe 25%
We are always safe 12.50% (India Aus, West)
We are ok (USA, EU)
We are not OK
What is this
Always wise 25.66%
我想拆分此列,以便将适用的 % 值从该列拆分为新的值。 所以输出将是
Share Percent LOCATION
We are safe 25%
We are always safe 12.50% India Aus, West
We are ok USA, EU
We are not OK
What is this
Always wise 25.66%
我认为下面会将其从右侧拆分,但它不起作用
df['Percent'] = df['Share'].str.rsplit(r' \d',1).str[0]
最佳答案
您可以提取这些值:
df[['Share','Percent']] = df['Share'].str.split(r'\s+(?=\d+(?:\.\d+)?%\s*$)',expand=True).fillna("")
Pandas 测试:
import pandas as pd
df = pd.DataFrame({'Share':['We are safe 25%','We are ok', 'We are always safe 12.50%']})
df[['Share','Percent']] = df['Share'].str.split(r'\s+(?=\d+(?:\.\d+)?%\s*$)',expand=True).fillna("")
>>> df
Share Percent
0 We are safe 25%
1 We are ok
2 We are always safe 12.50%
请参阅regex demo 。详情:
\s+
- 一个或多个空格(?=\d+(?:\.\d+)?%\s*$)
- 与紧随其后的位置匹配的正向前瞻:\d+
- 一位或多位数字(?:\.\d+)?
- 可选的.
序列和一个或多个数字%
-%
符号\s*
- 0 个或多个尾随(接下来是$
)空格和$
- 字符串结尾。
关于python-3.x - 用 % 按数字拆分 pandas 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64334963/