如何将带日期索引的Pandas Series转为含日期与值的列表?
如何将statsmodels分解的趋势序列转为日期+数值的嵌套列表
嘿,这个需求很好解决!你已经通过seasonal_decompose拿到了带日期索引的趋势Series,要转成你想要的[['日期字符串', 数值], ...]格式,有两种简单的实现方式:
首先先确认你的趋势Series生成代码(结合你已有的预处理步骤):
import pandas as pd import statsmodels.api as sm # 你的数据预处理代码 df = pd.read_csv("test_forecast/upload_data.csv") df["date"] = pd.to_datetime(df["date"], format="%Y-%m-%d") df.set_index("date", inplace=True) df = df.resample('D').mean().interpolate(method='linear', axis=0).fillna(0) # 获取带日期索引的趋势Series trend_series = sm.tsa.seasonal_decompose(df["upload"]).trend.interpolate(method='linear', axis=0).fillna(0)
方法1:遍历Series的索引与值
直接通过items()方法遍历趋势Series的每一对日期索引和数值,将datetime类型的日期转为你需要的字符串格式后,添加到结果列表中:
result_list = [] for date, value in trend_series.items(): # 将datetime对象转为"YYYY-MM-DD"格式的字符串 date_str = date.strftime("%Y-%m-%d") result_list.append([date_str, value])
方法2:转为DataFrame后批量处理
这种方法更简洁,适合数据量较大的场景:
- 先将趋势Series转为带日期列的DataFrame
- 将日期列转为指定格式的字符串
- 直接将DataFrame转为嵌套列表
# 重置索引,把日期从索引转为列 trend_df = trend_series.reset_index() # 重命名列名方便识别 trend_df.columns = ['date', 'upload_trend'] # 将日期列转为字符串格式 trend_df['date'] = trend_df['date'].dt.strftime("%Y-%m-%d") # 转为目标格式的嵌套列表 result_list = trend_df.values.tolist()
两种方法最终都会输出你需要的格式:[['2018-04-22', 3.919738], ['2018-04-23', 3.985145], ...]
内容的提问来源于stack exchange,提问作者Souvik Ray
相关产品推荐
相关产品推荐

