在Pandas中为DataFrame添加时间戳时遇ValueError错误求助
问题分析与解决
错误原因
你创建DataFrame时,minusMeans的形状是200行×3600列,但传入的index=spectraTimeStamp长度为3600。Pandas默认将数组的每一行对应一个索引元素,这要求数组行数必须和索引长度一致,当前两者不匹配,因此抛出形状错误。
解决步骤
1. 修正时间戳维度(常规场景)
你的数据是200次频率扫描(行)、每次扫描含3600个频率点(列),时间戳应当对应200次扫描的时间,而非3600个频率点。需生成200个时间戳:
from astropy.io import fits import pandas as pd hdu = fits.open(file) data = hdu[0].data minusMeans = data - data.mean() freqs = hdu[1].data['Frequency'][0] # 生成对应200次扫描的时间戳,替换start_time/end_time为你的实际时间 spectraTimeStamp = pd.date_range(start=start_time, end=end_time, periods=200) # 行对应扫描时间,列对应频率点 finalData = pd.DataFrame(minusMeans, index=spectraTimeStamp, columns=freqs)
2. 转置数据(特殊场景)
若时间戳确实对应3600个频率点,需转置数据让行数匹配索引长度:
# 转置数据为3600行×200列,匹配索引长度 finalData = pd.DataFrame(minusMeans.T, index=spectraTimeStamp)
内容的提问来源于stack exchange,提问作者M1ctl4nt3cutl1
相关产品推荐
相关产品推荐

