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

如何通过切片列值转换美国执政党DataFrame的年份格式

解决方案:将美国执政党任期数据转换为年度数据

问题分析

你需要把Years In Office列(格式如yyyy-yyyy)的任期数据,拆分成1945-2022年每行对应单个年份与执政党的结构。原代码存在几个核心问题:

  • 嵌套循环效率低下,且loc索引方向错误(应为loc[j, 'Party']而非反向)
  • 未包含任期的结束年份(比如1981-1989需覆盖1989年)
  • 固定字符串切片易因格式异常出错,分割逻辑不够健壮

修正后的代码

import pandas as pd
import numpy as np

# 读取并预处理原始数据
us_gov = pd.read_csv('/Users/elgasko/Documents/NUMERO ARMAS NUCLEARES/presidents.csv')
# 截取1945年后的行,保留目标列
us_gov = us_gov.iloc[31:, 1:4][['Years In Office', 'Party']]
# 按任期排序并保存结果(原代码未赋值,排序未生效)
us_gov = us_gov.sort_values(by=['Years In Office'])

# 创建目标DataFrame,包含1945-2022年的年份列
us_gov_def = pd.DataFrame({'Year': range(1945, 2023)})
us_gov_def['Party'] = np.nan

# 遍历任期数据,批量填充对应年份的政党
for _, row in us_gov.iterrows():
    # 分割任期字符串,提取起止年份
    start_str, end_str = row['Years In Office'].split('-')
    start_year = int(start_str)
    end_year = int(end_str.strip())
    # 确保结束年份不超过2022
    end_year = min(end_year, 2022)
    # 用布尔索引定位年份范围,批量填充政党
    year_mask = (us_gov_def['Year'] >= start_year) & (us_gov_def['Year'] <= end_year)
    us_gov_def.loc[year_mask, 'Party'] = row['Party'].strip().lower()

# 可选:将年份设为索引
us_gov_def.set_index('Year', inplace=True)
print(us_gov_def.head())

关键改进点

  • 用iterrows()遍历行,代码更简洁易读
  • 用split('-')分割任期字符串,避免固定切片的格式风险
  • 采用布尔索引批量填充数据,比嵌套循环效率提升显著
  • 处理结束年份边界(限制在2022年),避免超出目标范围
  • 修复排序未生效的问题,确保任期按时间顺序处理

内容的提问来源于stack exchange,提问作者Mario Diez Martínez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:55:18