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

Python如何读取.dta文件并保留Stata格式的周度时间变量

解决Python读取Stata .dta文件周度时间格式错位问题

Stata的YYYYwW格式属于自定义周度时间编码,Python读.dta的常用库默认会将其映射为标准datetime类型,自动转为对应起始日的日期格式,才会出现你遇到的输出错位问题,可通过以下两种方法解决:

方法1:读取时禁用自动日期转换,直接保留原始值

使用pandas的read_stata方法时传入convert_dates=False参数,关闭全局日期自动解析,直接拿到Stata中存储的原始周度标识:

import pandas as pd

# 读取时关闭所有日期自动转换
df = pd.read_stata("你的文件路径.dta", convert_dates=False)

# 输出验证,此时周度变量会保持和Stata一致的YYYYwW格式
print(df["你的周度变量列名"].head())

如果需要其他日期列正常解析,仅跳过周度列的转换,可以单独指定要解析的日期列:

# 仅将指定的其他日期列自动转为datetime,周度列保留原始值
df = pd.read_stata("你的文件路径.dta", convert_dates=["其他日期列1", "其他日期列2"])

方法2:将已转换为datetime的列反向还原为Stata周度格式

如果已经将数据读入且周度列被转为了datetime类型,可以手动计算还原为YYYYwW格式:

# 假设被自动转换的周度列名为week_col
# pandas 1.1.0及以上版本
df["stata_week"] = df["week_col"].dt.year.astype(str) + "w" + df["week_col"].dt.isocalendar().week.astype(str)

# pandas 1.1.0以下版本
# df["stata_week"] = df["week_col"].dt.year.astype(str) + "w" + df["week_col"].dt.week.astype(str)

注意事项

  • Stata默认周度规则是每年第一周从1月1日开始,和ISO周度规则可能存在1周的偏差,需要严格对齐的话优先使用方法1读取原始值
  • 如果周度变量在Stata中是带值标签的数值类型,读取时可以额外传入convert_categoricals=True保留标签内容,直接提取标签作为周度标识即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:27:03