【发布时间】:2021-09-06 12:03:03
【问题描述】:
我有一个带有文本的数据框和一个标签列表,当我添加到目标列时,我使用 .astype(str) 进行了转换。尝试将此数据发送到多标签机器学习模型时,出现错误 ValueError: too many dimensions 'str'。如何将其转换为列表或使用库中的方法?
train_data = pd.DataFrame({'text':[i for i in X_train], 'target_1':[i for i in y_train["target_1"]], 'target_2':[i for i in y_train["target_2"]],
'target_3':[i for i in y_train["target_3"]], 'target_4':[i for i in y_train["target_4"]], 'target_5':[i for i in y_train["target_5"]],
'target_6':[i for i in y_train["target_6"]]})
train_data['targets'] = train_data[train_data.columns[1:]].apply(lambda x: ', '.join(x.dropna().astype(str)), axis=1)
train_data = train_data.drop(['target_1', 'target_2', 'target_3', 'target_4', 'target_5', 'target_6'], axis=1)
train_data['targets'] = train_data['targets'].str.split(',')
train_data.info()
DataFrame 的样子
text targets
0 добрый день, никита. благодарю вас! добрый ден... [5.8, 6.2, 6.3, 5.5, 6.0, 5.0]
1 - добрый. напишите андрею кравцову, что мы об... [6.0, 6.2, 7.0, 5.8, 5.2, 5.0]
2 никита, добрый день. спасибо за доверие и ценн... [6.2, 6.4, 8.0, 5.5, 6.8, 5.5]
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 text 171 non-null object
1 targets 171 non-null object
dtypes: object(2)
当我转换为浮点数时出错
train_data["targets"].astype(float)
--> 997 return arr.astype(dtype, copy=True)
998
999 return arr.view(dtype)
ValueError: setting an array element with a sequence.
【问题讨论】:
-
请提供预期的minimal, reproducible example (MRE)。我们应该能够复制并粘贴您的代码的连续块,执行该文件,并重现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和所需的输出来测试我们的建议。请include a minimal data frame 作为您的 MRE 的一部分。
-
@Prune 感谢您的提示,我已将部分代码与数据集的概述和发生错误的位置分开。
-
这篇文章的可读性更高一些很好——但请在完成升级之前不要标记我们。
-
将
dtype对象数组转换为浮点数时,如果对象元素的大小不同,则会出现此错误。仔细检查对象 dtype 数组的元素。 -
您不能将
series.astype(float)用于具有列表内容的数组,即使它们的长度相同。你总是可以做df['targets'].apply(pd.Series)
标签: python pandas list dataframe numpy