【问题标题】:Can't use apply function in a column having some 'nan' values不能在具有某些“nan”值的列中使用应用函数
【发布时间】:2018-12-16 04:31:50
【问题描述】:

这是一个机器学习问题,在Python 3.0 环境中。我一直在工作 使用 Wines 数据集解决分类问题。我想对数据集中存在的特征“国家”的值使用 LabelEncoder()。由于有一些 '国家'中的'nan'值,我试图只编码那些不是 空值。但是,我写的代码:

import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()

dataset = pd.read_csv('winemag-data-130k-v2.csv')

a = pd.Series(data = le.fit_transform(dataset[dataset.loc[:, 'country'].notnull()].loc[:,'country']))
dataset[dataset.loc[:, 'country'].notnull()].loc[:, 'country'].apply(lambda i: i, a)

然而,这总是会产生如下错误:

ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

有什么解决办法吗?

【问题讨论】:

    标签: pandas machine-learning scikit-learn


    【解决方案1】:

    更新:我知道这是一个小技巧,但我认为它有效

    dataset.loc[:, 'country'] =dataset.loc[:, 'country'].replace(le.classes_, le.transform(le.classes_))
    

    旧答案 如果我假设您希望使用LabelEncoder() 对您的国家/地区进行编码是正确的,那么最后一行的语法不正确,因为您尝试使用 lambda 表达式错误地映射系列。应该是

    dataset.loc[:, 'country'] = a[dataset.loc[:, 'country'].notnull()]
    

    【讨论】:

    • 不。它不工作。在“a”中,我已将那些不为空的值的编码值存储在“国家”中。在下一步中,我希望将这些非空值替换为 'a' 中相应的编码值。
    • 你能发布完整代码的截图吗?还有你使用的是哪个 python、sklearn 和 pandas 版本?
    • 我正在使用 Python 3.6,Anaconda 安装。我只想用我存储在“a”中的各自编码数据替换“国家”列中的非空条目。
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 2018-11-13
    • 2019-10-18
    相关资源
    最近更新 更多