gpt4 book ai didi

python - 防止 pandas.DataFrame.loc 进行类型转换

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:09 24 4
gpt4 key购买 nike

如果我们初始化 pandas.DataFrame其中类型为 int64 :

import numpy as np
import pandas as pd

df1 = pd.DataFrame(np.arange(4).reshape((2,2)), columns=['one','two'])

然后将第一列类型转换为 np.str然后看第二行:

(1)

df2 = df1.astype({'one':np.str}) 
df2.loc[1,]

df2.loc[1,]返回类型为 object 的 pandas.Series ,保留元素的类型。

但是,如果我们将第二个第一列类型转换为 np.float

(2)

df3 = df1.astype({'one':np.float})
df3.loc[1,]

df3.loc[1,]返回类型为 float64 的 pandas.Series ,即 'two' 列中的 int64晋升为float64

有没有办法确保df.loc始终保留 (1) 中的类型,避免 (2) 中的行为?

(我为什么要关心?因为整数可以作为索引传递, float 不能,而且我对必须重新转换对象感到有点恼火,因为 pandas 认为我想要的返回值不是我所拥有的最初放入我的数据框中)

最佳答案

当您将整数和 float 组合成一个系列时,它会将整数转换为 float ,正如您所发现的那样。解决这个问题的一种方法是在数据框中设置 dtype=object ,如下所示:

import numpy as np
import pandas as pd

df1 = pd.DataFrame(np.arange(4).reshape((2,2)), columns=['one','two'], dtype=object)

df2 = df1.astype({'one':np.str})
df2.loc[1,]

one 2
two 3
Name: 1, dtype: object

df3 = df1.astype({'one':np.float})
df3.loc[1,]

one 2
two 3
Name: 1, dtype: object

Link

关于python - 防止 pandas.DataFrame.loc 进行类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58322787/

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