Python 3.x 将数字上的列拆分为%

Python 3.x 将数字上的列拆分为%,python-3.x,regex,Python 3.x,Regex,我有一个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

我有一个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("")
熊猫测试:

将熊猫作为pd导入
df=pd.DataFrame({'Share':['wesafe25%,'wearok','wealwaysafe12.50%]})
df['Share','Percent']=df['Share'].str.split(r'\s+(?=\d+(?:\.\d+)?%\s*$),expand=True)
>>>df
份额百分比
0我们是安全的25%
我们很好
2我们总是安全的12.50%
看。详情:

  • \s+
    -一个或多个空格
  • (?=\d+(?:\。\d+?%\s*$)
    -与紧跟其后的位置相匹配的正向前瞻:
    • \d+
      -一个或多个数字
    • (?:\。\d+)
      -可选的
      和一个或多个数字序列
    • %
      -一个
      %
      符号
    • \s*
      -0或更多尾随空格和
    • $
      -字符串结束

非常感谢,但我不想要第一列中的%ages,我想它会被拆分为df['Share','Percent']=df['Share'].str.split(r'(\d+(?:\。\d+))\s*$,expand=True)。fillna(““”)regex..演示站点太棒了..不知道这一点..非常感谢@asimo当使用
拆分时,您将得到3列,因此这是不好的。尝试我编辑答案的另一个解决方案。我对问题做了一个轻微的更改。基本上,现在尝试拆分和/或看到百分比或左括号