首页 > 解决方案 > pandas 将对象列转换为字符串类型

问题描述

我不明白熊猫中以下奇怪的转换行为:

d = pd.DataFrame({'a':['x', 'y'], 'b': ['s', 't']})
s = d['a'].astype('|S1')
print(s.dtypes)
d['a'] = s
print(d.dtypes)
print(s.dtypes)
print(d.astype('|S1').dtypes)

产生了输出:

|S1
a    object
b    object
dtype: object
|S1
a    |S1
b    |S1
dtype: object

当我将列转换为 apd.Series时,它会被转换,但当放回. 时DataFrame,它会恢复为Object. 但是可以转换整个“DataFrame”。是什么赋予了?

我一直在搜索文档以找到对此行为的一些参考,但没有找到任何线索。

为了完整起见,这里是一个缩写版本:

python           : 3.7.3.final.0
python-bits      : 64
OS               : Windows
OS-release       : 10
machine          : AMD64
processor        : Intel64 Family 6 Model 158 Stepping 9, GenuineIntel

pandas           : 0.25.1
numpy            : 1.17.1

标签: pythonstringpandasdtype

解决方案


如果我理解这个问题,希望这会有所帮助:

尝试覆盖列而不是将其分配给 s

d = pd.DataFrame({'a':['x', 'y'], 'b': ['s', 't']})
d['a'] = d['a'].astype('|S1')

我一直习惯使用.astype(str),但不确定你的具体情况。


推荐阅读