将 Pandas 中的文本转换为 int64 分类

sla*_*law 5 python pandas categorical-data

我有一些艺术家姓名,data['artist']我想通过以下方式转换为分类列:

x = data['artist'].astype('category').cat.codes
x.dtype 
Run Code Online (Sandbox Code Playgroud)

返回:

dtype('int32')
Run Code Online (Sandbox Code Playgroud)

我得到负数,这表明存在某种溢出情况。因此,我想使用np.int64它,但我找不到有关如何完成此操作的文档。

x = data['artist'].astype('category').cat.codes.astype(np.int64)
x.dtype
Run Code Online (Sandbox Code Playgroud)

给予

dtype('int64')
Run Code Online (Sandbox Code Playgroud)

但很明显 int32 已转换为 int64,因此负值仍然存在

x = data['artist'].astype('category').cat.codes.astype(np.int64)
x.min()

-1
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 4

我认为你NaN在专栏中有artist,所以代码是-1

data=pd.DataFrame({'artist':[np.nan,'y','z','x','y','z']})

x = data['artist'].astype('category').cat.codes
print x
0   -1
1    1
2    2
3    0
4    1
5    2
dtype: int8
Run Code Online (Sandbox Code Playgroud)

为了检查NaN你可以使用isnull

print data[data.artist.isnull()]
  artist
0    NaN
Run Code Online (Sandbox Code Playgroud)