如何使用Python Pandas将年月分离的均价数据转换为日期-均价结构
解决方法
假设你的CSV文件读取后的DataFrame为行索引是年份、列是月份的宽表结构,可通过以下步骤完成格式转换:
import pandas as pd # 1. 读取CSV,指定第一列为行索引(如果年份是单独列则去掉index_col=0) df = pd.read_csv('your_file.csv', index_col=0) # 2. 将年份索引转为普通列 df = df.reset_index().rename(columns={'index': 'Year'}) # 3. 用melt将宽表转成包含年月和价格的长表 df_long = df.melt(id_vars='Year', var_name='Month', value_name='Avg_Price') # 4. 合并年月并生成datetime格式列 # 先转成标准datetime类型,再按需格式化为"1980-Jan"样式 df_long['DateTime'] = pd.to_datetime(df_long['Year'].astype(str) + '-' + df_long['Month'], format='%Y-%b') df_long['DateTime'] = df_long['DateTime'].dt.strftime('%Y-%b') # 5. 整理最终列结构 final_df = df_long[['DateTime', 'Avg_Price']].dropna() # 可选:删除空值行
常见问题排查
- 若之前用
melt失败,大概率是没把年份索引转为普通列,或id_vars参数指定错误 - 确保月份列名是标准英文缩写(Jan/Feb等),否则
pd.to_datetime会报错,可手动补充月份映射或调整format参数适配你的数据格式 - 如果CSV里的年份本身就是普通列,直接跳过第二步的
reset_index,把id_vars设为对应的年份列名即可
内容的提问来源于stack exchange,提问作者RockyRose
相关产品推荐
相关产品推荐

