python - Pandas 数组异常:数据必须是一维的
问题描述
这是我的 Python 脚本,用于在我的数据集上使用Markov Blanket 算法:
df1 = read_csv("input-binary-120-training.csv")
Y1 = df1[df1.CategoryL == 1].CategoryL
X1 = minmax_scale(df1[df1.CategoryL == 1].ix[:, 1:24], axis = 0)
y_train = Y1.values
df2 = read_csv("input-binary-120-test.csv")
Y2 = df2[df2.CategoryL == 1].CategoryL
X2 = minmax_scale(df2[df2.CategoryL == 1].ix[:, 1:24], axis = 0)
y_test = Y2.values
x_test = X2.reshape(X2.shape[0], X2.shape[1], 1)
seed(2017)
kfold = KFold(n_splits=5, random_state=27, shuffle=True)
scores = list()
# Create a PyImpetus classification object and initialize with required parameters
model = PPIMBC(LogisticRegression(random_state=27, max_iter=1000, class_weight="balanced"), cv=0, num_simul=20, simul_type=0, simul_size=0.2, random_state=27, sig_test_type="non-parametric", verbose=2, p_val_thresh=0.05)
x_train = model.fit_transform(X1, Y1)
x_test = model.transform(x_test)
print("Markov Blanket: ", model.MB)
但是对于这条线,X_train = model.fit_transform(X1,Y1)
我得到了例外:
数据必须是一维的。
我用过X1.flatten()
,但它不起作用。你能告诉我这个问题吗?
完整错误:
x_train = model.fit_transform(X1, Y1)
File "/home/osboxes/Downloads/Thesis/PyImpetus.py", line 326, in fit_transform
self.fit(data, Y)
File "/home/osboxes/Downloads/Thesis/PyImpetus.py", line 299, in fit
final_MB, final_feat_imp = self._find_MB(data.copy(), Y)
File "/home/osboxes/Downloads/Thesis/PyImpetus.py", line 221, in _find_MB
Y = np.reshape(Y, (-1, 1))
File "<__array_function__ internals>", line 6, in reshape
File "/home/osboxes/venv/lib/python3.6/site-packages/numpy/core/fromnumeric.py", line 299, in reshape
return _wrapfunc(a, 'reshape', newshape, order=order)
File "/home/osboxes/venv/lib/python3.6/site-packages/numpy/core/fromnumeric.py", line 55, in _wrapfunc
return _wrapit(obj, method, *args, **kwds)
File "/home/osboxes/venv/lib/python3.6/site-packages/numpy/core/fromnumeric.py", line 48, in _wrapit
result = wrap(result)
File "/home/osboxes/venv/lib/python3.6/site-packages/pandas/core/generic.py", line 1999, in __array_wrap__
return self._constructor(result, **d).__finalize__(self)
File "/home/osboxes/venv/lib/python3.6/site-packages/pandas/core/series.py", line 311, in __init__
data = sanitize_array(data, index, dtype, copy, raise_cast_failure=True)
File "/home/osboxes/venv/lib/python3.6/site-packages/pandas/core/internals/construction.py", line 729, in sanitize_array
raise Exception("Data must be 1-dimensional")
Exception: Data must be 1-dimensional
解决方案
尝试重塑 Y1Y1=Y1[:, 0] or Y1=Y1.ravel()
以获得一维维度。
推荐阅读
- python - 将过去的日期值分组到列表中
- javascript - 从 Ionic 中的 API 访问嵌套数组
- google-apps-script - 根据 ID 值更新 Google Sheet Row(我使用 Javascript 将有效负载插入到我的工作表中)
- nix - 如何读取文件并对其内容应用替换?
- c++ - 嵌套的 co_await/coroutine 类似于 C# 的嵌套等待风格
- php - 将使用事件 api(HTTP 端点)的 Slack 应用程序迁移到 Slack 套接字模式
- rust - 与“Vec”中的自引用结构的生命周期不匹配
- process - 如何使用共享内存来存储整数并访问它以传递给我的进程函数?
- c - 关于不兼容指针类型的警告 - c
- task - Yocto - 为什么我不能覆盖构建任务?