对 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())
据我了解,如果有多种类型,pandas 会强制值。因此,我认为 nan 的存在导致数字被强制转换为 float 。
但是,即使添加 .dropna()
后,生成的 DataFrame 仍然存在 float 。
为什么会这样,如何将值保留为整数?
复制链接 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
当您使用 bool 二维数组索引数据帧时,这应该是预料之中的。但 NaN
值被视为 float
,因此 Pandas 必须向上转换所有受影响的系列才能继续在数字系列/数组中保存数据。
当您使用pd.DataFrame.dropna
时,不会触发最佳数据类型的“重新计算”。因此,您的数据框现在将包含 float
值。
相反,如果您通过一维数组进行索引,Pandas 将方便地按行过滤,您不再需要 dropna
:
print(df[boolean_filter.all(1)])
a b
0 1 1
关于python - 为什么 pandas bool 过滤会产生 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52646162/