代码之家  ›  专栏  ›  技术社区  ›  Kristada673

在数据帧中查找“缺少”值的最佳方法是什么?

  •  2
  • Kristada673  · 技术社区  · 6 年前

    假设有一个数据帧:

    import pandas as pd
    df = pd.DataFrame([1,2,3,4,5, 7,8, 10])
    

    我想在里面找到“失踪”的数字(6和9)。我的代码是:

    li = []
    low = int(min(df.values))
    high = int(max(df.values))
    
    for i in range(low, high+1):
        if i not in df.values:
            li.append(i)
    
    print(li)
    >>> [6, 9]
    

    但是如果数据帧很大,这可能需要一段时间的for循环。在我的例子中,数据帧的长度约为300k行,需要162秒。

    是否有更有效的(矢量化的?)怎么做?

    2 回复  |  直到 6 年前
        1
  •  3
  •   andrew_reece    6 年前

    只需列出整个范围(假设您的边界表示为 df )然后使用 isin() 找出不同之处。

    m = 10
    full = pd.Series(np.arange(1, m+1))
    
    full[~full.isin(df[0])].values
    # array([6, 9])
    
        2
  •  0
  •   Mr. T Andres Pinzon    6 年前

    df['didf'] = df[0] - df[0].shift(1) 将突出显示间隙,而大于1的值表示缺少值