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