【发布时间】: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 解决了这个问题。