【问题标题】:How to extract numbers (year) from string? [duplicate]如何从字符串中提取数字(年份)? [复制]
【发布时间】:2021-05-10 02:47:09
【问题描述】:

我有示例字符串,我必须从 pandas Dataframe 中提取年份。我不确定该怎么做?我尝试使用使用正则表达式的 pandas 提取方法,但我不成功。

输入:

Césio 137 - O Pesadelo de Goiânia (1990)

Nattbuss 807 (1997)

Νόμος 4000 (1962)

输出:

1990

1997

1962

我尝试过使用以下正则表达式:\d\d\d\d

但在表达式Νόμος 4000 (1962) 中,我没有得到预期的结果。我只想提取1962,而不是4000

我的目标是从给定的表达式中提取year

提前致谢。

【问题讨论】:

  • 请从intro tour 重复on topichow to ask。 “告诉我如何解决这个编码问题”不是堆栈溢出问题。我们希望您做出诚实的尝试,然后然后就您的算法或技术提出一个具体的问题。 Stack Overflow 并不打算取代现有的文档和教程。在这里寻求教程参考或个人帮助是题外话。
  • 请给minimal reproducible example 什么不成功。你也可以阅读stackoverflow.com/q/4736/3001761
  • 我诚挚的歉意。我已经更新了我的问题。我会确保不再重复。
  • 来自重复的df['col'].str.extract('.*\((.*)\).*') 如果重复的答案有帮助,请务必点赞。

标签: python regex pandas


【解决方案1】:

这是一个非常简单的正则表达式。

df = pd.read_csv(io.StringIO("""Césio 137 - O Pesadelo de Goiânia (1990)
Nattbuss 807 (1997)
Νόμος 4000 (1962)"""), names=["input"])

myre = re.compile(".*\(([0-9]+)\).*")
df.assign(output=df.input.str.extract(myre))

输出

input output
0 Césio 137 - O Pesadelo de Goiânia (1990) 1990
1 Nattbuss 807 (1997) 1997
2 Νόμος 4000 (1962) 1962

【讨论】:

    【解决方案2】:

    这应该会有所帮助:

    strings = ["Césio 137 - O Pesadelo de Goiânia (1990)", "Nattbuss 807 (1997)", "Νόμος 4000 (1962)"]
    
    for string in strings:
        str = string.split(" ")
        last = len(str) - 1
        print(str[last].replace("(","").replace(")",""))
    

    结果:

    1990
    1997
    1962
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 2021-04-14
      相关资源
      最近更新 更多