【问题标题】:How to select and replace similar occurrences in a column如何选择和替换列中的相似匹配项
【发布时间】:2019-06-30 19:45:52
【问题描述】:

我正在为一个班级开展 ML 项目。我目前正在清理数据,但遇到了问题。我基本上有一个列(被标识为 dtype 对象),它对酒店的某个方面进行评分。当我检查该列的值是什么以及它们出现的频率时,我注意到其中有一些错误的值(如下所示,有些行没有评级,而是将日期作为值)

rating       value_counts()      
100           527
98            229
97            172
99            163
96            150
95            127
93            100
90             94
94             93
80             65
92             55
91             39
88             35
89             32
87             31
85             25
86             17
84             12
60             12
83              8
70              5
73              5
82              4
78              3
67              3
2018-11-11      3
20              2
81              2
2018-11-03      2
40              2
79              2
75              2
2018-10-26      2
2               1
2018-08-30      1
2018-09-03      1
2015-09-05      1
55              1
2018-10-12      1
2018-05-11      1
2018-11-14      1
2018-09-15      1
2018-04-07      1
2018-08-16      1
71              1
2018-09-18      1
2018-11-05      1
2018-02-04      1
NaN             1 

我想做的是用 NaN 替换所有看起来像日期的值,以便以后可以用适当的值填充它们。除了一个一个地选择每个不同的日期并用 NaN 替换它之外,还有什么好方法可以做到这一点?有没有办法选择相似的值(在本例中是所有以相同方式开始的日期,2018 年)并将它们全部替换?

感谢您抽出宝贵时间阅读本文!

【问题讨论】:

    标签: python pandas machine-learning data-cleaning


    【解决方案1】:

    有多个选项可以清理这些数据。

    选项1:评级列是对象类型,通过'-'的存在搜索字符串并替换为np.nan

    df.loc[df['rating'].str.contains('-', na = False), 'rating'] = np.nan
    

    选项 2:将列转换为数字,这会将日期强制转换为 nan。

    df['rating'] = pd.to_numeric(df['rating'], errors = 'coerce')
    

    【讨论】:

    • 非常感谢您的帮助!我只是尝试实现第一个选项,但出现此错误:ValueError: cannot index with vector contains NA / NaN values。这是因为我已经有其他 NaN 值了吗?如果是这样,我该如何解决?
    • 有一个参数na = False,使用第一个选项有效。查看编辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 2021-03-27
    • 2018-09-23
    • 2012-12-02
    相关资源
    最近更新 更多