用Python中的字符串提取数据帧中的最后一个数字

用Python中的字符串提取数据帧中的最后一个数字,python,regex,pandas,dataframe,extract,Python,Regex,Pandas,Dataframe,Extract,我有熊猫的数据框。我不知道如何开始提取信息 列中的数据如下所示: ->Company A 100->Company B 60->Company C 80-> Company D ->Company A 100->Company B 53.1->Company C 82.2->Company D 100-> Company G ->Company A 100->Company B 23-> Company D 等等 公司的信

我有熊猫的数据框。我不知道如何开始提取信息

列中的数据如下所示:

->Company A 100->Company B 60->Company C 80-> Company D
->Company A 100->Company B 53.1->Company C 82.2->Company D 100-> Company G
->Company A 100->Company B 23-> Company D
等等

公司的信息并不重要,只是每个项目的最后一个数字

我想提取最后->之前的数字,并将其粘贴到另一列中

例如,分别提取80、100和23

80
100
23
我有这个

import re
text = '->Company A 100->Company B 60->Company C 80-> Company D'
re.findall(r'\d+', text)[-1]
它给出了正确的输出“80”

但是当我为一个df做这件事的时候


I get:TypeError:expected string或bytes like object

如果需要字符串的最后一个数字,可以尝试以下操作:

df['num'] = df['text'].str[::-1].str.extract('(\d+)')
df['num'] = df['num'].str[::-1]
df

           text                                         num
0   -> Company A 100->Company B 60->Company C 80->...   80
1   -> Company A 100->Company B 53.1->Company C 82...   100
2   -> Company A 100->Company B 23-> Company D          23
如果您只想要最后一个'->'之前的号码,也可以尝试此方法:

df['num'] = df['text'].str.split('->').str[-2].str.extract('(\d+)')

           text                                         num
0   -> Company A 100->Company B 60->Company C 80->...   80
1   -> Company A 100->Company B 53.1->Company C 82...   100
2   -> Company A 100->Company B 23-> Company D          23
df['text'].str.split('->').str[-2].str.extract('(\d+(?:\.\d+)?)')
如果要在最后一个'->'之前使用浮点数,请执行以下操作:

df['num'] = df['text'].str.split('->').str[-2].str.extract('(\d+)')

           text                                         num
0   -> Company A 100->Company B 60->Company C 80->...   80
1   -> Company A 100->Company B 53.1->Company C 82...   100
2   -> Company A 100->Company B 23-> Company D          23
df['text'].str.split('->').str[-2].str.extract('(\d+(?:\.\d+)?)')

更改在正则表达式中,如果需要字符串的最后一个数字,可以尝试以下操作:

df['num'] = df['text'].str[::-1].str.extract('(\d+)')
df['num'] = df['num'].str[::-1]
df

           text                                         num
0   -> Company A 100->Company B 60->Company C 80->...   80
1   -> Company A 100->Company B 53.1->Company C 82...   100
2   -> Company A 100->Company B 23-> Company D          23
如果您只想要最后一个'->'之前的号码,也可以尝试此方法:

df['num'] = df['text'].str.split('->').str[-2].str.extract('(\d+)')

           text                                         num
0   -> Company A 100->Company B 60->Company C 80->...   80
1   -> Company A 100->Company B 53.1->Company C 82...   100
2   -> Company A 100->Company B 23-> Company D          23
df['text'].str.split('->').str[-2].str.extract('(\d+(?:\.\d+)?)')
如果要在最后一个'->'之前使用浮点数,请执行以下操作:

df['num'] = df['text'].str.split('->').str[-2].str.extract('(\d+)')

           text                                         num
0   -> Company A 100->Company B 60->Company C 80->...   80
1   -> Company A 100->Company B 53.1->Company C 82...   100
2   -> Company A 100->Company B 23-> Company D          23
df['text'].str.split('->').str[-2].str.extract('(\d+(?:\.\d+)?)')
更改发生在正则表达式中,用于获取浮点或整数,并通过索引获取最后一个值:

df['num'] = df['col'].str.findall(r'([-+]?\d*\.\d+|\d+)').str[-1]
print (df)


                                                 col  num
0  -> Company A 100->Company B 60->Company C 80->...   80
1  -> Company A 100->Company B 53.1->Company C 82...  100
2         -> Company A 100->Company B 23-> Company D   23
用于使用获取浮点或整数,并通过索引获取最后一个值:

df['num'] = df['col'].str.findall(r'([-+]?\d*\.\d+|\d+)').str[-1]
print (df)


                                                 col  num
0  -> Company A 100->Company B 60->Company C 80->...   80
1  -> Company A 100->Company B 53.1->Company C 82...  100
2         -> Company A 100->Company B 23-> Company D   23

谢谢你的快速回答!有可能把这些数字也包括在小数中吗?谢谢,这很有效。将->之前的所有数字以及小数提取到新列中是否困难?还是我应该创建一个新帖子好的,那很好。不用担心,谢谢你迄今为止的努力!非常感谢。很抱歉问你。现在添加了吗?谢谢您的快速回答!有可能把这些数字也包括在小数中吗?谢谢,这很有效。将->之前的所有数字以及小数提取到新列中是否困难?还是我应该创建一个新帖子好的,那很好。不用担心,谢谢你迄今为止的努力!非常感谢。很抱歉问你。现在添加了吗?