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

我有以下内容:

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

最佳答案

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,因此熊猫必须上载所有受影响的序列,才能继续以数字序列/数组保存数据。

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

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

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

   a  b
0  1  1

关于python - 为什么 Pandas bool 过滤会导致浮点数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52646162/

10-13 07:23