发生异常: IndexError xindex 0 is out of bounds for axis 1 with size 0
用k-means算法跑iris和wine数据集时,iris数据集可以正常运行,但是wine数据集出现报错

这个错误 index 0 is out of bounds for axis 1 with size 0 表示你正在尝试访问一个空的第二维度(列)。
于是将读取数据集的代码改成了以下形式去检查数据形状
def load_and_preprocess_data():
try:
# 读取数据集
iris = pd.read_csv("dataset/Iris.csv", header=0)
wine = pd.read_csv("dataset/wine.csv")
wine_red = pd.read_csv("dataset/wine+quality/winequality-red.csv", sep=';') # 注意分隔符
wine_white = pd.read_csv("dataset/wine+quality/winequality-white.csv", sep=';') # 注意分隔符
df = wine_red # 设置需要读取的数据集
print("=== 数据基本信息 ===")
print(f"数据形状: {df.shape}")
print(f"列名: {df.columns.tolist()}")
print(f"前5行数据:")
print(df.head())
print(f"数据类型:")
print(df.dtypes)
# 检查最后一列是否是标签
columns = list(df.columns)
print(f"最后一列名称: {columns[-1]}")
print(f"最后一列唯一值: {df[columns[-1]].unique()}")
# 正确分离特征和标签
features = columns[:-1] # 所有列除了最后一列
labels = columns[-1] # 最后一列作为标签
dataset = df[features] # 特征数据
original_labels = df[labels] # 原始标签
print(f"特征数量: {len(features)}")
print(f"特征名称: {features}")
print(f"数据集形状: {dataset.shape}")
print(f"标签形状: {original_labels.shape}")
return dataset, original_labels, features, labels, df
except Exception as e:
print(f"数据加载错误: {e}")
# 如果文件不存在,创建示例数据
print("创建示例数据用于测试...")
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=1599, centers=3, n_features=4, random_state=42)
dataset = pd.DataFrame(X, columns=[f'feature_{i}' for i in range(4)])
original_labels = pd.Series(y)
features = dataset.columns.tolist()
labels = 'target'
df = dataset.copy()
df[labels] = y
return dataset, original_labels, features, labels, df
发现winequality-red.csv数据集跑出来的数据形状为
=== 数据检查 ===
形状: (4898, 0)
维度: 2
大小: 0
列数: 0
这意味着:
有4898行数据,但有0列特征(所有特征都被移除了)
这就说明数据在读取或预处理的时候出现了问题
最后发现!是因为iris数据集的数据分隔符是",",而wine数据集的数据分割符是";",由于无法识别";",所以出现了wine数据集读取不正确的情况
解决办法: 在读取数据集的代码wine_red = pd.read_csv("dataset/winequality-red.csv")中加入sep=';'
wine_red = pd.read_csv("dataset/winequality-red.csv",sep=';')
即可解决问题
浙公网安备 33010602011771号