date_history = pd.DataFrame(data_integrity.iloc[:, 0]) dataset_history = pd.DataFrame(data_integrity.iloc[:, 1]) # 数据划分完,数据格式转换 dataset_history = [each[0] for each in np.array(dataset_history.iloc[:, [0]]).tolist()] # 历史数据 data_history_conversion = [{i: dataset_history[i * 96:96 * (i + 1)]} for i in range(int(len(dataset_history) / 96))] # 历史数据转化 data_pre = [each for each in np.array(dataset_pre).tolist()] # 预测所需要的今日数据 data_pre_conversion = np.array([float(item) for item in data_pre[0:96]]) # 预测所需要的今日数据的格式转化 代码优化
时间: 2024-01-14 15:04:51 浏览: 83
以下是对代码的优化:
```python
date_history = pd.DataFrame(data_integrity.iloc[:, 0])
dataset_history = pd.DataFrame(data_integrity.iloc[:, 1])
# 数据划分完,数据格式转换
dataset_history = dataset_history.iloc[:, 0].tolist() # 历史数据
data_history_conversion = [dict(enumerate(dataset_history[i * 96:96 * (i + 1)])) for i in range(len(dataset_history) // 96)] # 历史数据转化
data_pre = np.array(dataset_pre).flatten().astype(float) # 预测所需要的今日数据
```
主要优化点有:
1. `dataset_history` 可以直接使用 `tolist()` 方法转换为列表,不需要使用 `np.array` 和 `iloc` 索引。
2. `data_history_conversion` 可以使用 `enumerate` 函数代替手动计算索引,可以使代码更加简洁。
3. `data_pre` 可以使用 `flatten()` 方法将多维数组转换为一维数组,并使用 `astype(float)` 方法将字符串转换为浮点数。
相关问题
time_new_list= data_integrity.iloc[-1, 0] minutes = int(time_new_list.minute) + int(time_new_list.hour) * 60 interval_length = ((minutes / 15) + 1) if interval_length == 96: dataset_pre = data_integrity.load.tail(int(interval_length)) else: dataset_pre = (data_integrity.load[:-int(interval_length)]).tail(96) date_history = pd.DataFrame(data_integrity.iloc[:, 0]) dataset_history = pd.DataFrame(data_integrity.iloc[:, 1]) # 数据划分完,数据格式转换 dataset_history = [each[0] for each in np.array(dataset_history.iloc[:, [0]]).tolist()] # 历史数据 data_history_conversion = [{i: dataset_history[i * 96:96 * (i + 1)]} for i in range(int(len(dataset_history) / 96))] # 历史数据转化 data_pre = [each for each in np.array(dataset_pre).tolist()] # 预测所需要的今日数据 data_pre_conversion = np.array([float(item) for item in data_pre[0:96]]) # 预测所需要的今日数据的格式转化 代码优化
以下是代码优化后的版本:
```
# 计算时间间隔
time_new_list = data_integrity.iloc[-1, 0]
minutes = time_new_list.minute + time_new_list.hour * 60
interval_length = (minutes // 15) + 1
# 获取预测数据集
if interval_length == 96:
dataset_pre = data_integrity.load.tail(interval_length)
else:
dataset_pre = data_integrity.load[:-interval_length].tail(96)
# 获取历史数据集
date_history = data_integrity.iloc[:, 0]
dataset_history = data_integrity.iloc[:, 1].iloc[:, 0].tolist()
# 将历史数据转换为字典格式
data_history_conversion = [
{i: dataset_history[i * 96 : 96 * (i + 1)]} for i in range(len(dataset_history) // 96)
]
# 获取预测所需要的今日数据
data_pre = dataset_pre.values.tolist()
data_pre_conversion = np.array(data_pre[0:96], dtype=float)
```
优化后的代码主要做了以下几个方面的改进:
1. 使用了整除符号 "//" 来计算时间间隔,避免了使用 int() 函数进行类型转换。
2. 使用了 pandas 库的 tail() 函数来获取最后几行数据,使代码更加简洁。
3. 将历史数据集的转换方式改为了使用列表推导式,避免了使用 for 循环。
4. 使用了 numpy 库的 array 函数来将预测数据转换为数组格式,避免了使用列表推导式和 for 循环。同时,指定了数组的数据类型为 float,避免了使用 float() 函数进行类型转换。
dataX = pd.DataFrame(dataset.iloc[:, 0 : dataset.shape[1] - 1])
这行代码的作用是从一个Pandas DataFrame对象`dataset`中提取除了最后一列之外的所有列,并将这些列存储在一个新的DataFrame对象`dataX`中。下面是对每个部分的具体解释:
### 代码解析
```python
dataX = pd.DataFrame(dataset.iloc[:, 0 : dataset.shape[1] - 1])
```
- **`pd.DataFrame(...)`**:这是构造函数用于创建一个新的Pandas DataFrame对象。这里它接收另一个DataFrame作为输入参数。
- **`dataset.iloc[:, 0 : dataset.shape[1] - 1]`**:
- `iloc` 是一种按位置索引的方式访问数据的选择器。它可以选取指定范围内的行列。
- 冒号 (`:`) 表示选择所有的行(即从第0行到最后一行)。
- `, 0 : dataset.shape[1] - 1` 指的是选择从第0列开始直到倒数第二列之间的所有列。这里的切片操作并不会包括结束点,因此实际上取到了除最后一列外的所有列。
简单来说,这段代码会获取原始数据集中的特征部分而忽略掉标签或目标变量所在的那一列,通常这样做是为了准备机器学习模型训练的数据预处理过程的一部分。
### 示例说明
假设你有如下的`dataset` DataFrame:
| 特征1 | 特征2 | 标签 |
| --- | ---- | -- |
| ... | ... | ... |
执行该命令后将会得到只包含“特征1” 和 “特征2”的新DataFrame赋值给`dataX`,同时丢弃了“标签”。
### 注意事项
- 确保已经导入了pandas库并且`import pandas as pd`.
- 如果你的数据集中没有明确区分特征和标签,则需要注意选择正确的列区间以避免丢失重要信息。
阅读全文
相关推荐

















