【发布时间】:2026-01-29 01:40:01
【问题描述】:
为什么在 pandas 中将列转换为类别时会收到两种不同的行为?
举个例子,假设我用
创建了一个数据框>>> import pandas as pd
>>> import numpy as np
>>> pd.__version__
u'0.22.0'
>>> np.__version__
'1.14.0'
>>> df = pd.DataFrame(columns=['nombre'], data=[1,2,3,4])
现在我将我的列转换为一个对象:
>>> df['nombre'] = df['nombre'].astype('object')
>>> print(df['nombre'].dtype)
object
dtype 现在是对象。
>>> df['nombre'] = df['nombre'].astype('category')
>>> print(df['nombre'].cat.categories.dtype.name)
int64
转换为类别后,内部dtype为int64。
让我们重新开始一个新的数据框
>>> del df
>>> df = pd.DataFrame(columns=['nombre'], data=[1,2,3,4])
这一次,我们将内部列转换为'str'
>>> df['nombre'] = df['nombre'].astype('str')
>>> print(df['nombre'].dtype)
object
内部表示是一个对象。这是有道理的,因为我们转换为“str”。
>>> df['nombre'] = df['nombre'].astype('category')
>>> print(df['nombre'].cat.categories.dtype.name)
object
转换为类别后,内部dtype现在是object,和我们之前收到的int64不一样?
所以我的问题如下,为什么在从对象 dtype 转换为类别时会收到两种不同的行为?
【问题讨论】:
标签: python pandas categories