发生异常: IndexError xindex 0 is out of bounds for axis 1 with size 0

用k-means算法跑iris和wine数据集时,iris数据集可以正常运行,但是wine数据集出现报错

7ac995b13721dbd792b0698f0e4f4e3e

这个错误 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=';')

即可解决问题

posted @ 2025-11-03 11:40  ZhiWu~  阅读(10)  评论(0)    收藏  举报