import pandas as pd import numpy as np import math import matplotlib.pyplot as plt import openpyxl data_train = pd.read_excel(r"D:\北京市空气质量数据train.xlsx") # 获取数据集和每个维度的名称 data_train = data_train.drop(['日期'], axis=1) data_train = data_train.drop(['质量等级'], axis=1) # 把第 1 列 日期 数据去除掉 datasets = data_train.values labels = data_train.columns.values data_train_result = np.array(data_train.iloc[:, [-1]]) train_result = data_train_result print(datasets) print(labels) data_test = pd.read_excel(r"D:\北京市空气质量数据test.xlsx") # 获取数据集和每个维度的名称 data_test_features = data_test.drop(['日期'], axis=1) data_test_features = data_test_features.drop(['质量等级'], axis=1) # 把第 1 列 日期 数据去除掉 datasets_test = data_test_features.values data_test_result = np.array(data_test.iloc[:, [-1]]) test_result = data_test_result print(datasets_test) print(test_result) distance = np.array([len(datasets), len(datasets_test)]) for i in range(len(datasets)): for j in range(len(datasets_test)): su = 0 for m in range(0, 1, 2): n = (datasets[i][m]-datasets_test[j][m]) ** 2 su = su + n distance[i][j] = math.sqrt(su) print(distance)请问这段代码报错TypeError: 'numpy.int32' object does not support item assignment是为什么,该怎么解决
时间: 2024-01-24 17:17:02 浏览: 119
python数据分析与可视化 import pandas as pd import numpy as np import m
这是因为 distance 数组是使用 np.array() 定义的,而其默认的数据类型是 int32,而你在后面做了 item assignment,即对数组中的某个元素进行赋值操作,这种操作需要使用可变的数据类型,而 int32 不支持可变操作。
解决方法是在定义 distance 数组时指定数据类型为 float64 或者使用列表定义 distance,如下所示:
1. 指定数据类型为 float64:
```python
distance = np.array([len(datasets), len(datasets_test)], dtype=np.float64)
```
2. 使用列表定义 distance:
```python
distance = [[0] * len(datasets_test) for i in range(len(datasets))]
```
以上两种方法都可以避免出现该报错。
阅读全文