代码之家  ›  专栏  ›  技术社区  ›  Colin Ricardo

为什么布尔过滤会导致浮动?

  •  0
  • Colin Ricardo  · 技术社区  · 7 年前

    对熊猫来说很陌生,所以如果之前有人问过这个问题,我深表歉意。

    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() 结果数据帧具有浮点。

    复制链接 here .

    1 回复  |  直到 7 年前
        1
  •  3
  •   jpp    7 年前

    df[boolean_filter] 返回包含 NaN 价值观:

    print(df[boolean_filter])
    
         a    b
    0  1.0  1.0
    1  NaN  NaN
    2  NaN  NaN
    3  NaN  NaN
    

    float ,因此熊猫必须向上投射所有受影响的序列才能继续在数字序列/数组中保存数据。

    pd.DataFrame.dropna ,不会触发最佳数据类型的“重新计算”。因此,您的数据帧现在将包含 浮动 价值观。

    相反,如果您通过一维数组进行索引,Pandas将方便地按行过滤,您不再需要 dropna :

    print(df[boolean_filter.all(1)])
    
       a  b
    0  1  1