gpt4 book ai didi

python - Pandas 在过滤时将 int 提升为 float

转载 作者:行者123 更新时间:2023-12-01 07:00:30 30 4
gpt4 key购买 nike

Pandas 在过滤时似乎将 int 提升为 float。我在下面提供了一个简单的代码片段,但我有一个更复杂的示例,我相信此促销会导致不正确的过滤,因为它比较 float。有没有解决的办法?我读到这是不同版本的 pandas 之间行为的变化 - 过去肯定不是这样的。

在下面您可以看到,它将 [4 13][5 14] 更改为 [4.0 13.0][ 5.0 14.0]

In [53]: df1 = pd.DataFrame(data = {'col1' : [1, 2, 3, 4, 5], 'col2' : [10, 11, 12, 13, 14]})  
...: df2 = pd.DataFrame(data = {'col1' : [1, 2, 3], 'col2' : [10, 11, 12]})

In [54]: df1
Out[54]:
col1 col2
0 1 10
1 2 11
2 3 12
3 4 13
4 5 14

In [55]: df2
Out[55]:
col1 col2
0 1 10
1 2 11
2 3 12

In [56]: df1[~df1.isin(df2)]
Out[56]:
col1 col2
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 4.0 13.0
4 5.0 14.0

In [57]: df1[~df1.isin(df2)].dropna()
Out[57]:
col1 col2
3 4.0 13.0
4 5.0 14.0

In [58]: df1[~df1.isin(df2)].dtypes
Out[58]:
col1 float64
col2 float64
dtype: object

In [59]: df1.dtypes
Out[59]:
col1 int64
col2 int64
dtype: object

In [60]: df2.dtypes
Out[60]:
col1 int64
col2 int64
dtype: object

最佳答案

这里没有发生 float 比较。 isin 对于丢失的数据返回 NaN,并且由于您使用 numpyint64,结果正在转换为 float64

在 0.24 中,pandas 添加了 nullable integer dtype ,您可以在此处使用。

<小时/>
df1 = df1.astype('Int64')
df2 = df2.astype('Int64')

df1[~df1.isin(df2)]

   col1  col2
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 4 13
4 5 14
<小时/>

请注意,如果您想对结果使用 numpy 运算,numpy 会将以上内容视为具有 dtype object 的数组。

关于python - Pandas 在过滤时将 int 提升为 float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58662187/

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