ValueError:设置带有序列的数组元素?

时间:2019-03-13 21:51:39

标签: python pandas valueerror dummy-variable

为什么我会收到此错误消息?

这是我的代码中包含的变量。它们包括的列都是虚拟变量:

country_cols = wine_dummies.loc[:, 'country_Chile':'country_US']
variety_cols = wine_dummies.loc[:, 'variety_Cabernet 
Sauvignon':'variety_Zinfandel']
pricecat_cols = wine_dummies.loc[:, 'price_category_low':]

这是引发错误的代码(它在“ X = wine [feature_cols_1]”处引发错误:

feature_cols_1 = ['price', country_cols, variety_cols, 'year']
feature_cols_2 = [pricecat_cols, country_cols, variety_cols, 'year']

X = wine[feature_cols_1] <---ERROR
y = wine['points']

这是我数据框的开头:

country designation points  price   province    variety      year   ... variety_Riesling    variety_Rosé    variety_Sangiovese  variety_Sauvignon Blanc variety_Syrah   variety_Tempranillo variety_White Blend variety_Zinfandel   price_category_low  price_category_med
Portugal    Avidagos    87  15.0    Douro   Portuguese Red  2011.0  ... 0  0    0   0   0   0   0   0   1 0    

^“ ...”之后的每个虚拟变量(0和1s)对应于“ ...”之后的每一列。

1 个答案:

答案 0 :(得分:0)

这实际上很麻烦,因此只有在'country_Chile':'country_US'之间有很多列时,它才有用。在下面的示例中,我故意通过获取列索引将a中的middle_columns列删除。

这是使用pandas.Index.get_loc查找开始和结束列的索引,然后可以将它们用作数据帧列完整列表上的切片。然后使用*将列表解压缩到最终的列列表中。

import pandas as pd

df = pd.DataFrame({'a': [1, 2, 3], 'b': [2, 3, 4], 'c': [3, 4, 5], 
                   'd': [4, 5, 6], 'wine': ['happy', 'drunk', 'sad'],
                   'year': [2002, 2003, 2019]})

middle_columns = df.columns[df.columns.get_loc('b'):df.columns.get_loc('d')+1]
all_cols = ['wine', *middle_columns, 'year']
X = df[all_cols]

当前方法行不通的原因是feature_cols_1 = ['price', country_cols, variety_cols, 'year']返回了字符串数据帧的列表,然后尝试将它们用作第二个数据帧的列。