说有一个数据框:
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循环可能需要一些时间。就我而言,数据帧的长度约为30万行,需要162秒。
是否有更有效的方法(矢量化)?
答案 0 :(得分:3)
只需列出完整范围(假设边界在df
中表示),然后使用isin()
来找出差异。
m = 10
full = pd.Series(np.arange(1, m+1))
full[~full.isin(df[0])].values
# array([6, 9])
答案 1 :(得分:0)
df['didf'] = df[0] - df[0].shift(1)
将突出显示空白,而值大于1则表示缺少值