【问题标题】:Trouble casting NaNs to type 'category' in Pandas在 Pandas 中将 NaN 转换为“类别”时遇到问题
【发布时间】:2021-12-27 18:27:42
【问题描述】:

在使用 astype('category') 转换 nan 值后,我遇到了问题。我正在使用 pandas 1.1.3 和 numpy 1.19.1。

import pandas as pd
import numpy as np

employees = pd.DataFrame.from_dict({'First Name':['Douglas', 'Thomas', 'Maria'],
                                'Gender': ['Male', 'Male', 'Female'],
                                'Start Date': ['1993-08-06', '1996-03-31', np.datetime64('NaT')],
                                'Salary':[0, 61933, 130590],
                                'Mgmt': [True, True, False],
                                'Team': ['Marketing', np.nan, 'Finance']})

在转换之前,当您测试一片元素的单个元素时,结果是相同的。

>>> employees.loc[1, 'Team'] != 'Finance'
True

>>> employees['Team'] != 'Finance'
True  
True  
False

但是在转换为astype('category') 之后,逻辑测试的结果在各个元素和切片之间是不同的:

>>> employees['Team'] = employees['Team'].astype('category')
>>> employees.loc[1, 'Team'] != 'Finance'
True

>>> employees['Team'] != 'Finance'
True  
False  
False

谁能解释一下是怎么回事?

【问题讨论】:

  • 你的 pandas 和 numpy 版本是什么?转换前后的结果对我来说都是一样的(真,真,假)。
  • 几年前我对旧版本也有类似的问题。仍然不确定我理解为什么会这样,但似乎已经改变:stackoverflow.com/questions/60511951/…
  • 使用 pandas 1.3.4(和 numpy 1.21.4),我无法重现这一点。直接从帖子中复制代码,两者的输出都是 T、T、F。
  • 升级到 pandas 1.3.4 和 numpy 1.21.1 解决了这个问题。

标签: python pandas numpy nan


【解决方案1】:

docs 表示 nan 不是有效的类别条目 -

缺失值不应包含在分类的类别中, 仅在价值观中。相反,据了解 NaN 是不同的, 并且总是有可能。当使用分类的 代码,缺失值的代码总是 -1

您的数据框中的 nan 将比较不等于任何有效的分类条目,即

(df['Team_Cat'] != 'Finance')[1] == (df['Team_Cat'] == 'Finance')[1]

【讨论】:

  • 谢谢,这很有用,但不确定这是完整的答案,升级到 pandas 1.3.4 和 numpy 1.21.1 后问题已经消失
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 2014-02-28
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
相关资源
最近更新 更多