gpt4 book ai didi

python - pandas astype 无法识别固定长度字节串格式

转载 作者:行者123 更新时间:2023-12-01 09:09:23 24 4
gpt4 key购买 nike

考虑以下示例:

df = pd.DataFrame([[1, "a"], [2, "b"]], columns=["int", "str"])
df.astype({"int":np.int8, "str": np.dtype('|S2')})
arr = df.to_records(index=False)
print(arr.dtype.descr)

我期望看到的是:

[(u'int', '<i8'), (u'str', '|S2')]

相反,我得到了:

[(u'int', '<i8'), (u'str', '|O')]

'|O' 的含义是什么?

我也尝试了df.astype({"int":np.int8, "str": '|S2'}),并得到了相同的结果。

最佳答案

这意味着类型对象from the docs :

'O' (Python) objects

当您创建 DataFrame 时,尽管您指定了类型,但字符串的类型为 Object:

df.dtypes

int int64
str object
dtype: object

astype 不是就地操作,因此您的命令目前不执行任何操作,您需要重新分配:

df = df.astype({"int":np.int8, "str": np.dtype('|S2')})

这仍然不会从 object 转换字符串:

df.dtypes

int int8
str object
dtype: object

因此,当您使用 to_records 时,将使用 object 而不是您指定的类型。

解决方法是单独创建字符串系列,并将其分配给您的 DataFrame:

s = pd.Series(['a', 'b'], dtype=np.dtype('|S2'))
df['d'] = s

df.dtypes

int int8
str object
d |S2
dtype: object

并使用to_records:

df.to_records(index=False)

rec.array([(1, b'a', b'a'), (2, b'b', b'b')],
dtype=[('int', 'i1'), ('str', 'O'), ('d', 'S2')])

关于python - pandas astype 无法识别固定长度字节串格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51789821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com