gpt4 book ai didi

python - 无法将 Pandas DataFrame 列数据类型转换为特定大小的字符串 (|S2)

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:43 24 4
gpt4 key购买 nike

我正在尝试将 DataFrame 的列 dtype 更改为 S2。如果我用 float 数据来做,效果很好:

>>>df = pd.DataFrame({'a':[1,2,3],'b':[1.1,3.2,5.6]})
>>>df['b'] = df['b'].astype('|S4',copy=False)
>>>print(df.dtypes,'\n\n',df.memory_usage())

返回:

a    int64
b |S4
dtype: object

Index 80
a 24
b 12
dtype: int64

但是,当我对字符串进行同样的尝试时:

>>>df = pd.DataFrame({'a':[1,2,3],'b':['a','b','c']})
>>>df['b'] = df['b'].astype('|S4',copy=False)
>>>print(df.dtypes,'\n\n',df.memory_usage())

返回:

a     int64
b object
dtype: object

Index 80
a 24
b 24
dtype: int64

有人可以向我解释我在这里做错了什么吗?

最佳答案

可能是一个错误。我认为当转换为 int 和 float 以外的 dtype 时,pandas 倾向于保留现有列的 object dtype。因此,要更改 dtype 将其分配给新列。即

df = pd.DataFrame({'a':[1,2,3],'b':['1.1','3.2','5.6']})

df['b'] = df['b'].astype('|S4',copy=False)
df['c'] = df['b'].astype('|S4',copy=False)

输出:

a     int64
b object
c |S4
dtype: object

Index 80
a 24
b 24
c 12
dtype: int64

或者临时解决方案

df = pd.DataFrame({'a':[1,2,3],'b':['1.1','3.2','5.6']})
b = df['b'].astype('|S4',copy=False)
del df['b']
df['b'] = b

df.dtypes
a    int64b      |S4dtype: object

关于python - 无法将 Pandas DataFrame 列数据类型转换为特定大小的字符串 (|S2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46386928/

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