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

问题描述 投票:1回答:2

我有来自pandas的数据框。我不知道如何开始提取信息。

列中的数据如下所示:

->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

等等...

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

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

例如,分别提取8010023

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做它

re.findall(r'\d+', df['ColumnName'])[-1]

我得到:TypeError:期望的字符串或类似字节的对象

python regex pandas dataframe extract
2个回答
2
投票

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

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+)?)')

这个变化在正则表达式中


1
投票

使用regex获取带有findall的浮点数或整数,并通过索引获取最后的值:

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
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.