无法连接“<class 'numpy.ndarray'>”类型的对象;只有 Series 和 DataFrame obj 是有效的

Posted

技术标签:

【中文标题】无法连接“<class \'numpy.ndarray\'>”类型的对象;只有 Series 和 DataFrame obj 是有效的【英文标题】:cannot concatenate object of type '<class 'numpy.ndarray'>'; only Series and DataFrame objs are valid无法连接“<class 'numpy.ndarray'>”类型的对象;只有 Series 和 DataFrame obj 是有效的 【发布时间】:2022-01-21 00:38:27 【问题描述】:

我打算在使用 StandardScaler 后使用 pairplot 可视化数据, 但是我的代码产生了以下错误

    raise TypeError(msg)
TypeError: cannot concatenate object of type '<class 'numpy.ndarray'>'; only Series and DataFrame objs are valid

完整代码

from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
import seaborn as sns
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler 

iris = sns.load_dataset('iris')
X = iris.drop(columns='species')
y = iris['species']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42)

X_train=StandardScaler().fit_transform(X_train)

sns.pairplot(data=pd.concat([X_train, y_train], axis=1), hue=y_train.name)

plt.show()

【问题讨论】:

【参考方案1】:

使用StandardScaler后,你的X_train(之前是pd.DataFrame)变成了numpy.ndarray,所以你不能连接X_trainy_train。因为X_train 是 NumPy 数组,y_train 是 Pandas DataFrame

要使用 concat,X_trainy_train 都必须是 Pandas DataFrame,因此请使用此代码将 X_train 转换为 DataFrame。

X_train = StandardScaler().fit_transform(X_train)

X_train = pd.DataFrame(X_train, columns = X.columns)
sns.pairplot(data=pd.concat([X_train, y_train], axis=1), hue=y_train.name)
plt.show()

它会起作用的。

【讨论】:

它工作正常,但是当 X_train 在一个全局变量中并且来自另一个方法时它再次显示相同的错误,知道为什么吗? 不明白。能详细解释一下吗? 我的 X_train 是在不同的方法(def)中生成并被声明为 global ,当我在将其转换为数据帧后尝试连接时,它显示错误,让我尝试重现错误并更新 @Ctrl7 我在等。 对不起,我无法重现错误,这是一个很长的程序,但这是我用来将 X_train 声明为全局 ``` global scaled_data scaled_data=stdcl.fit_transform(X_train) scaled_data=pd 的代码。 DataFrame(scaled_data, columns = X.columns) ``` 和可视化块中的这段代码 ``` data_concat=pd.concat([scaled_data, y_train], axis=1) sns.kdeplot( data=data_concat) plt.savefig( “kdeplot”)```

以上是关于无法连接“<class 'numpy.ndarray'>”类型的对象;只有 Series 和 DataFrame obj 是有效的的主要内容,如果未能解决你的问题,请参考以下文章

LINUX的SFTP无法连接

SVN 无法连接

MYSQL为啥用IP地址无法连接

MYSQL为啥用IP地址无法连接

MYSQL为啥用IP地址无法连接

ADB 以前是无线连接,现在无法连接,出现双端口错误(无法连接 *.*.*.*:5555:5555)