python - 如何从Python中的文本中提取二维年份?

标签 python regex pandas extract

我尝试从 Pandas DataFrame 中的一列中的短文本中提取出生年份和死亡年份:

firstname lastname (1937-2015)

我使用此代码获得第一年:

data = re.findall(r'\d+', txt)
if len(data) > 0 :
    data = float(data[0])
    if data >= 1800 and data <= 2021 :
        return data
return None

但我无法从文本中提取第二年。 例如,当我将 data[0] 更改为 data[1] 时,出现错误消息“列表索引超出范围”

最佳答案

您可以定义 2 个捕获组并检查它们

df = pd.DataFrame(
    {'txt': ['firstname lastname (1937-2015)', 'firstname lastname (1780-1820)',
             'firstname lastname (1945-?)', 'firstname lastname (1980-2022)']})

df[['birth', 'death']] = df['txt'].str.extract(r'(\d+)-(\d+|\?)').replace({'?': None}).astype(float). \
    applymap(lambda x: x if 1800 <= x <= 2021 else None)
print(df)

输出:

                              txt   birth   death
0  firstname lastname (1937-2015)  1937.0  2015.0
1  firstname lastname (1780-1820)     NaN  1820.0
2     firstname lastname (1945-?)  1945.0     NaN
3  firstname lastname (1980-2022)  1980.0     NaN

关于python - 如何从Python中的文本中提取二维年份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69887094/

相关文章:

java - 菜鸟问题 - 我可以编写一个脚本来为我们的内部云软件执行操作吗?

javascript - RegExp 数字范围(1 到 36)

Python Pandas 基于另一列值创建新列

python - 如何找到 DataFrame 行的所有组合?

Python Pandas 在函数中处理数据帧

python - 是否可以使用 Python 编写 Windows 服务?

python - <myObject> 对象不可迭代,Django REST Framework

python - 为什么打印到标准输出这么慢?可以提速吗?

regex - 在 Powershell 中使用函数替换

java - Java中如何从字符串模板中获取值