鱼C论坛

 找回密码
 立即注册
查看: 1293|回复: 1

时间索引创建错误

[复制链接]
发表于 2023-10-24 11:13:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
现在有一个光谱数据,存放在train1.csv中,有855行和890列,每行是一个样本,每列是一个光谱波段的反射率值,现在要求python把光谱数据转化为时间序列数据并保存在新文件中,转化为855行和10个时间维度,每一个时间维度有89个时间步长,将数据转化成一个包含索引和值的Pandas Series 格式


“发生异常: ValueError
Length of values (760950) does not match length of index (8550)
  File "D:\0000可见光2\程序\MiniRocket\Test4.py", line 29, in <module>
    series = pd.Series(series_data.flatten(), index=index, name='Reflectance')
ValueError: Length of values (760950) does not match length of index (8550)”



import pandas as pd
import numpy as np

# 读取光谱数据
data = pd.read_csv('train1.csv', header=None)

# 定义时间维度和时间步长
num_samples, num_bands = data.shape
num_time_dimensions = 10
num_time_steps = num_bands // num_time_dimensions

# 将数据重新排列为时间序列格式
time_series_data = np.zeros((num_samples, num_time_dimensions, num_time_steps))

for sample_idx in range(num_samples):
    for time_dim in range(num_time_dimensions):
        start_band = time_dim * num_time_steps
        end_band = (time_dim + 1) * num_time_steps
        time_series_data[sample_idx, time_dim, :] = data.iloc[sample_idx, start_band:end_band]

# 创建一个Pandas Series
series_data = time_series_data.reshape(num_samples, -1)

# 创建索引
index = [(sample, time_dim) for sample in range(num_samples) for time_dim in range(num_time_dimensions)]
index = pd.MultiIndex.from_tuples(index, names=['Sample', 'Time Dimension'])

# 创建Pandas Series
series = pd.Series(series_data.flatten(), index=index, name='Reflectance')

# 保存转换后的数据为新的CSV文件
series.to_csv('time_series_data.csv', header=True)

print("转换并保存成功")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-24 11:13:33 | 显示全部楼层
问题的根本原因是在创建Pandas Series时,值的长度与索引的长度不匹配。根据错误信息,值的长度为760950,而索引的长度为8550。

这个问题是由于在创建索引时出现了错误。索引的长度应该是8550,而不是760950。根据代码,索引是通过将样本和时间维度的组合作为元组来创建的。根据给定的问题描述,应该有855个样本和10个时间维度,所以索引的长度应该是8550。

为了解决这个问题,我们需要修改索引的创建方式。在原始代码中,我们使用了列表推导式来创建索引。然而,由于使用了错误的循环范围,导致索引的长度不正确。

下面是修改后的代码:
# 创建索引
index = [(sample, time_dim) for sample in range(num_samples) for time_dim in range(num_time_dimensions)]
index = pd.MultiIndex.from_tuples(index, names=['Sample', 'Time Dimension'])

# 创建Pandas Series
series = pd.Series(series_data.flatten(), index=index, name='Reflectance')

通过上述修改,我们正确地创建了索引,使其长度为8550。现在,再次运行代码,应该可以成功创建Pandas Series并保存转换后的数据为新的CSV文件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 13:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表