ValueError: setting an array element with a sequence?
ValueError: setting an array element with a sequence?
为什么我会收到此错误消息?
这是我的代码中包含的变量。它们包含的列都是虚拟变量:
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
^“...”之后的每个虚拟变量(0s 和 1s)对应于“...”之后的每一列
这实际上非常麻烦,因此只有在 'country_Chile':'country_US'
之间有很多列时它才有用。在下面的示例中,我通过使用列索引故意删除 a
中的 a
列。
这是使用 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']
returns 字符串列表 和 数据帧,然后您尝试将其用作列到第二个数据框。
为什么我会收到此错误消息?
这是我的代码中包含的变量。它们包含的列都是虚拟变量:
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
^“...”之后的每个虚拟变量(0s 和 1s)对应于“...”之后的每一列
这实际上非常麻烦,因此只有在 'country_Chile':'country_US'
之间有很多列时它才有用。在下面的示例中,我通过使用列索引故意删除 a
中的 a
列。
这是使用 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']
returns 字符串列表 和 数据帧,然后您尝试将其用作列到第二个数据框。