【问题标题】:Extract the last number in a dataframe with strings in Python用Python中的字符串提取数据框中的最后一个数字
【发布时间】:2019-07-23 10:05:19
【问题描述】:

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


    【解决方案1】:

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

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

    变化在正则表达式中

    【讨论】:

    • 感谢您的快速回答!是否也可以将这些数字包含在小数中?
    • 感谢工作。是否也很难将->(带小数)之前的所有数字也提取到新列中?还是我应该创建一个新帖子? :)
    • 好的,很好。不用担心,感谢您迄今为止所做的所有努力!非常感谢。
    • 抱歉询问。现在添加了吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-07-25
      • 2021-10-14
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多