为什么熊猫布尔过滤会导致浮点数?

时间:2018-10-04 12:00:16

标签: python pandas

是熊猫的新手,所以很抱歉以前是否曾问过这个问题。

我有以下内容:

import pandas as pd

d = {
  'a': [1, 2, 3, 4],
  'b': [1, 2, 3, 4]
}

df = pd.DataFrame(d)

# We want to remove values above 2.
cutoff = 2
boolean_filter = df < cutoff
new_df = df[boolean_filter].dropna()
print(new_df.head())

据我了解,如果存在多种类型,熊猫将强制转换价值。因此,我认为nan的存在导致数字被强制浮动。

但是,即使添加了.dropna()之后,所得的DataFrame仍具有浮点数。

这是为什么,如何将值保留为整数?

重新链接here

1 个答案:

答案 0 :(得分:4)

df[boolean_filter]返回包含NaN值的数据帧:

print(df[boolean_filter])

     a    b
0  1.0  1.0
1  NaN  NaN
2  NaN  NaN
3  NaN  NaN

在用布尔二维数组为数据框建立索引时应该可以预期。但是NaN的值被认为是float,因此Pandas必须向上转换所有受影响的序列,才能继续保存数字序列/数组中的数据。

使用pd.DataFrame.dropna时,不会触发最佳数据类型的“重新计算”。因此,您的数据框现在将包含float个值。

相反,如果您通过一维数组建立索引,Pandas将方便地按行过滤,并且您不再需要dropna

print(df[boolean_filter.all(1)])

   a  b
0  1  1