You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将总统数据集‘Age atstart of presidency’列清洗为指定格式?

清洗总统就职年龄列的解决方案

针对你需要将「Age at start of presidency」列统一为「X years, Y days」格式的需求,结合维基百科数据集的常见格式,给出以下Python pandas实现方案:

步骤1:分析原始数据格式

维基百科的该字段通常有3种常见形式:

  • 完整格式:57 years, 80 days
  • 仅年份:43 years
  • 小数年份:54.5 years(需转换为年+天)

步骤2:编写正则提取与转换代码

import pandas as pd

# 读取数据集
df = pd.read_csv("presidents.csv")

# 用正则提取年、天数值,覆盖所有常见格式
extract_pattern = r'(?:(\d+(?:\.\d+)?) years?,?)?(?:\s*(\d+) days?)?'
df[['raw_years', 'raw_days']] = df["Age at start of presidency"].str.extract(extract_pattern)

# 处理空值与数据类型转换
df['raw_years'] = df['raw_years'].fillna(0).astype(float)
df['raw_days'] = df['raw_days'].fillna(0).astype(int)

# 将小数年份的小数部分转为天数
decimal_days = (df['raw_years'] % 1 * 365).round().astype(int)
df['final_years'] = df['raw_years'].astype(int)
df['final_days'] = df['raw_days'] + decimal_days

# 生成目标格式的清洗后列
df["Age at start of presidency"] = df.apply(
    lambda row: f"{row['final_years']} years, {row['final_days']} days",
    axis=1
)

# 清理中间辅助列(可选)
df = df.drop(['raw_years', 'raw_days', 'final_years', 'final_days'], axis=1)

正则表达式说明

(?:(\d+(?:\.\d+)?) years?,?)?(?:\s*(\d+) days?)?

  • (?:(\d+(?:\.\d+)?) years?,?)?:匹配可选的年份部分,支持整数和小数年份,捕获年的数值
  • (?:\s*(\d+) days?)?:匹配可选的天数部分,捕获天的数值

效果验证

  • 输入57 years, 80 days → 输出57 years, 80 days
  • 输入43 years → 输出43 years, 0 days
  • 输入54.5 years → 输出54 years, 183 days

内容的提问来源于stack exchange,提问作者Yana Ghanim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:57:27