Python 什么';“这是找到”的最好方法;“失踪”;数据帧中的值?

Python 什么';“这是找到”的最好方法;“失踪”;数据帧中的值?,python,pandas,dataframe,indexing,Python,Pandas,Dataframe,Indexing,假设有一个数据帧: 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) >

假设有一个数据帧:

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秒


有没有更有效的(矢量化的)方法来实现这一点?

只需列出整个范围(假设您的边界在
df
中表示),然后使用
isin()
查找差异

m = 10
full = pd.Series(np.arange(1, m+1))

full[~full.isin(df[0])].values
# array([6, 9])

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

您知道应该存在的一组数字吗?是的,从1到阈值(我们可以称之为
m
)。如果缺少最大值怎么办?
np.setdiff1d(np.arange(df[0].min(),df[0].max()),df[0])
?@user2285236在我看来不错,将其作为答案发布。。。如果你使用OP的边框,你甚至可以看到它有多短:
np.setdiff1d(np.arange(1,m+1),df[0])
Yes!这将运行时间从162秒减少到0.05秒!伟大的很高兴为您提供帮助。您是否也尝试过测量user2285236的
np.setdiff1d
解决方案?看看它是如何比较的会很有趣。