繁体   English   中英

错误:ValueError:仅当我尝试使用statsmodels进行散点图时,才必须将布尔值传递给DataFrame

[英]ERROR: ValueError: Must pass DataFrame with boolean values only when I try to do a scatter plot using statsmodels

我是Python的新手,我读过的相关问题对我来说没有多大意义。 我有以下问题。 我想使用Python进行多元回归,并尝试使用statsmodels。 在这种情况下,我想做一个散点图。

我的数据样本:

ID  order  V1     V2    E1  E2  E3   M
103  1    ECA    TEXT    7   3   5   7
105  1    ECA    TEXT    3   7   4   5
107  1    ECA    TEXT    7   7   7   4
109  1    ECA    TEXT    6   6   6   3

我想用E1-E3作为我的IV,将M的平均得分作为我的DV进行多元回归。

这就是我加载数据的方式。

myRegressionData = pd.read_csv('C:/Users/user/Desktop/Folder 1/Python/Regression data file.csv')

这些是我的x和y:

X_sk = myRegressionData[[col for col in myRegressionData.columns if col[:8] == 'E']]

Y = myRegressionData[['M{}'.format(ii) for ii in range(1, 19)]]
y = np.mean(Y, axis=1)

这是我得到错误的代码:

myRegressionData.plot(kind='scatter',x = X_sk, y=np.mean(Y, axis=1))

回报

ValueError :必须仅通过布尔值传递DataFrame

myRegressionData.info() 

回报

RangeIndex:90个条目,0到89列:146个条目,IDOpenEndedResponse对EngagingAA d类型:float64(10),int64(134),object(2)内存使用量:102.7+ KB

在下面的:

myRegressionData.plot(kind='scatter',x = X_sk, y=np.mean(Y, axis=1))

xy 期望列名或减。 X_sknp.mean(Y, axis=1)是数据。 提供列名或直接使用您的绘图仪。


我们使用matplotlib的示例:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

myRegressionData = pd.DataFrame([
    {'a0': 4, 'a1': 3, 'b0': 2, 'b1': 1}, 
    {'a0': 3, 'a1': 1, 'b0': 4, 'b1': 1}, 
    {'a0': 1, 'a1': 2, 'b0': 3, 'b1': 1}
])

X_sk = myRegressionData[[col for col in myRegressionData.columns if col[:1] == 'b']]
Y = myRegressionData[['a{}'.format(ii) for ii in range(0,2)]]
plt.scatter(X_sk['b0'], np.mean(Y, axis=1))

该示例应该是您正在做的事情的简化版本。


如果您坚持使用pandas DataFrame绘图仪,则可以执行以下操作:

y = pd.DataFrame(np.mean(Y, axis=1), columns=['y'])
df = pd.concat([X_sk, y], axis=1)
df.plot(kind='scatter', x='b0', y='y')

具有许多X值,但只有一个y值,并使用颜色进行区分:

X_sk = myRegressionData[[col for col in myRegressionData.columns if col[:1] == 'b']]
Y = myRegressionData[['a{}'.format(ii) for ii in range(0,2)]]
y = pd.DataFrame(np.mean(Y, axis=1))
yy = pd.concat([y, y])
plt.scatter(X_sk, yy, c=['b', 'r'])

使用scatter_matrix最终替代方案:

y = pd.DataFrame(np.mean(Y, axis=1), columns=['y'])
df = pd.concat([X_sk, y], axis=1)
scatter_matrix(df, alpha=0.2, figsize=(6, 6))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM