Pandas Series计算后转列表如何保留对应日期索引
问题背景
调用fred.get_series('GDPC1')获取的GDPC1序列是pandas Series对象,自带日期索引,索引与值一一对应。原实现逻辑用于计算季度GDP的年化环比增长率,但最终生成的普通列表仅存储了计算得到的增长率数值,丢失了匹配的日期索引。
原实现代码:
rgdp = fred.get_series('GDPC1') fgdp=rgdp rlistgdp=[] for a in range(len(rgdp)): rgdp2=((rgdp.iloc[a]/rgdp.iloc[a-1])**4-1) * 100 rlistgdp.append(rgdp2) rlistgdp
参考截图:

实现方法
优先推荐使用pandas原生时序方法计算,既不会丢失索引,还能规避原循环的逻辑bug(原循环从索引0开始遍历,a=0时a-1=-1会取序列最后一个值作为除数,导致第一期增长率计算错误)。
方法1:原生pandas实现(推荐)
用pct_change()直接计算环比增速,计算结果会自动保留原日期索引,无需手动遍历:
rgdp = fred.get_series('GDPC1') # 计算季度年化环比增长率,索引与原序列完全对应 rgdp_annual_growth = (rgdp.pct_change() + 1) ** 4 * 100 - 100 # 如果需要列表格式存储(日期+对应增长率),直接转成元组列表即可 rlistgdp = list(rgdp_annual_growth.items())
计算得到的rgdp_annual_growth本身就是带日期索引的Series,可直接用于后续时序分析、绘图、按日期筛选等操作;转成的列表每个元素都是(日期时间, 增长率值)的元组,不会丢失索引对应关系。
方法2:保留循环写法改造
如果需要沿用手写循环的逻辑,在追加元素时同时把对应日期索引和计算值一起存入列表即可,注意遍历从索引1开始,避免第一期计算错误:
rgdp = fred.get_series('GDPC1') rlistgdp = [] # 从索引1开始遍历,第一期不存在前值,无有效增长率 for a in range(1, len(rgdp)): current_date = rgdp.index[a] growth = ((rgdp.iloc[a] / rgdp.iloc[a-1]) ** 4 - 1) * 100 rlistgdp.append( (current_date, growth) )
内容的提问来源于stack exchange,提问作者JamieC113a
相关产品推荐
相关产品推荐

