使用pystata导入后,如何将Stata运行月份格式转为datetime?
Stata日期格式转Pandas datetime的便捷方法
Stata的各类日期本质是基于固定基准的数值偏移量,针对不同格式可以用Pandas的日期工具直接转换,以下是对应方案:
1. 日格式(%td)
%td是从1960年1月1日开始的天数偏移,直接用pd.to_datetime()指定原点和单位:
import pandas as pd # 转换df中名为td_col的%td格式列 df['td_col'] = pd.to_datetime(df['td_col'], unit='D', origin='1960-01-01')
2. 月格式(%tm)
%tm是从1960年1月开始的月份偏移,有两种简洁转换方式:
# 方法1:将数值转成年月字符串后解析 df['tm_col'] = pd.to_datetime(df['tm_col'].astype(str), format='%Y%m') # 方法2:基于基准日期做月份偏移计算 df['tm_col'] = pd.to_datetime('1960-01-01') + pd.to_timedelta(df['tm_col'], unit='M')
3. 日期时间格式(%tc)
%tc是从1960年1月1日0点开始的毫秒偏移,指定毫秒单位即可:
df['tc_col'] = pd.to_datetime(df['tc_col'], unit='ms', origin='1960-01-01')
批量处理技巧
如果DataFrame中有多个Stata日期列,可根据数值范围或列名特征批量转换:
# 筛选含日期/月份关键词的列 stata_date_cols = [col for col in df.columns if 'date' in col.lower() or 'month' in col.lower()] for col in stata_date_cols: # 通过数值范围判断格式:%tm数值通常小于1000(2024年对应768),%td数值更大 if df[col].max() < 1000: df[col] = pd.to_datetime('1960-01-01') + pd.to_timedelta(df[col], unit='M') else: df[col] = pd.to_datetime(df[col], unit='D', origin='1960-01-01')
若使用pystata时也可先在Stata会话中将日期转成字符串格式再导出,但直接用Pandas转换效率更高。
内容的提问来源于stack exchange,提问作者FooBar
相关产品推荐
相关产品推荐

