【问题标题】:Convert a list of numbers in a column of a dataframe to float ValueError: setting an array element with a sequence将数据框列中的数字列表转换为浮点 ValueError: setting an array element with a sequence
【发布时间】: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


【解决方案1】:

我用列表修复了它

train_data["targets"] = [list(map(float, target)) for target in train_data["targets"]]

【讨论】:

    猜你喜欢
    • 2018-09-18
    • 2016-07-07
    • 2021-03-17
    • 2011-04-19
    • 2014-05-25
    • 2018-11-24
    • 2018-04-29
    • 1970-01-01
    • 2019-03-04
    相关资源
    最近更新 更多