我尝试从 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/