熊猫的新手,所以很抱歉,如果以前曾问过这个问题。
我有以下内容:
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/