为什么Pandas会忽略numpy.str_数据类型?

yqyhoc1h  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(91)

我想创建一个Series对象并指定dtype=np.str_,但似乎Pandas忽略了该类型。
我尝试使用astype方法,但结果相同:

import pandas as pd
import numpy as np

s1 = pd.Series(["t1", "t2"], dtype=np.str_)

print(type(s1[0]))  # <class 'str'>
print(type(s1.astype(np.str_)[0]))  # <class 'str'>

字符串
如果我将其替换为dtype=np.bytes_或使用代码pd.Series([np.str_("t1"), np.str_("t2")])创建对象,它将按预期工作:

s2 = pd.Series(["t1", "t2"], dtype=np.bytes_)
s3 = pd.Series([np.str_("t1"), np.str_("t2")])

print(type(s2[0]))  # <class 'numpy.bytes_'>
print(type(s3[0]))  # <class 'numpy.str_'>

m4pnthwp

m4pnthwp1#

对于您的问题,最直接的答案是pandas只支持以下文本类型:

  • object
  • pandas.StringDtype()

这在用户指南中有明确说明
这就是为什么如果你传递str,它默认为object

>>> pd.Series([1, "foo"], dtype=str)
0      1
1    foo
dtype: object

字符串
事实上,如果你仔细查看astype的pandas Package 器,你会在源代码中看到:

# in pandas we don't store numpy str dtypes, so convert to object
if isinstance(dtype, np.dtype) and issubclass(values.dtype.type, str):
    values = np.array(values, dtype=object)

相关问题