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

Python解析多序列并重命名表头:时间序列起止点不一致问题

解决Pandas多序列解析与表头重命名问题

嘿,我来帮你搞定这个混乱的多时间序列数据处理问题!从你给出的DataFrame输出来看,你的CSV文件其实是两个独立的时间序列(日期+价格)并排存放,但Pandas读取时没能正确识别表头,导致出现了Unnamed列,再加上两个序列的时间范围不重叠,才出现了空值。下面是一步步的解决方案:

步骤1:重新读取并修复表头

首先,你的原始CSV表头逻辑应该是Date,233740 KS Equity,Date,233160 KS Equity,但Pandas自动给重复的Date列加了Unnamed后缀。我们可以手动指定清晰的表头,同时跳过原文件中错误的表头行:

import pandas as pd

# 手动指定区分度明确的表头
cols = ['Date_233740', 'Price_233740', 'Date_233160', 'Price_233160']
# skiprows=1 跳过原文件中那行混乱的表头
df = pd.read_csv("price.csv", names=cols, skiprows=1, low_memory=False)

这样读进来的DataFrame就不会再出现Unnamed类的模糊列名了。

步骤2:拆分并规整两个独立时间序列

接下来,我们把两个股票的时间序列拆分成单独的DataFrame,将日期转为datetime类型并设为索引,方便后续合并:

# 处理第一个股票:233740 KS Equity
df_233740 = df[['Date_233740', 'Price_233740']].dropna()  # 移除空值行
df_233740['Date_233740'] = pd.to_datetime(df_233740['Date_233740'])
# 设置日期为索引,并给价格列设置清晰的股票代码名称
df_233740 = df_233740.set_index('Date_233740').rename(columns={'Price_233740': '233740 KS Equity'})

# 处理第二个股票:233160 KS Equity
df_233160 = df[['Date_233160', 'Price_233160']].dropna()
df_233160['Date_233160'] = pd.to_datetime(df_233160['Date_233160'])
df_233160 = df_233160.set_index('Date_233160').rename(columns={'Price_233160': '233160 KS Equity'})

步骤3:合并为规整的统一时间序列

现在把两个序列按日期合并,这样就能直观对比两个股票在重叠日期的价格,非重叠日期会显示NaN,你可以根据需求选择空值处理方式:

# 按日期索引合并,保留所有日期(outer连接)
merged_df = pd.merge(df_233740, df_233160, left_index=True, right_index=True, how='outer')

# 可选:处理空值,比如用前一天的价格填充(适合时间序列的常用方式)
merged_df = merged_df.fillna(method='ffill')

print(merged_df.head())

合并后的输出会类似这样:

233740 KS Equity  233160 KS Equity
2015-12-17           10330.0               NaN
2015-12-18           10710.0               NaN
2015-12-21           10720.0               NaN
2015-12-22           10495.0               NaN
2015-12-23           10425.0               NaN
2017-08-31               NaN           10460.0
...

额外说明

  • 如果你的原始CSV第一行就是那行混乱的表头(比如你之前输出的Unnamed: 0 233740 KS Equity...),那skiprows=1是必须的,用来跳过错误表头,使用我们指定的清晰列名。
  • 空值处理可以灵活调整:除了前向填充ffill,还可以用后向填充bfill、均值填充,或者直接删除含空值的行(merged_df.dropna()),完全取决于你的分析需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:17:32