python - 为什么 pandas bool 过滤会产生 float ?

标签 python pandas

对 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/

相关文章:

c# - 在 C# 控制台中嵌入一个 exe 文件?

python - 如何查明数据框中的行是否已存在于单独的数据框中?

python - 将列添加到常规数据帧中的日期时间索引数据帧

python - 反转数据框中给定日期的时间

python - 文件存在时文件名中的数字递增

python - 使用 reduce 来缩短 for 循环

python - 如何在X轴上跳过特定时间段(股市午休时间)

python - 如何使用 PyGObject 使窗口居中

python - 使用 pandas Rolling 对象创建列表的滑动窗口

python - 通过与 Pandas 中的另一个数据框匹配来替换列表列的有效方法