假设有一个数据框:
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秒。
有没有更有效的方法(矢量化)?
只需列出整个范围(假设您的界限以表示df
),然后使用isin()
来找出差异即可。
m = 10
full = pd.Series(np.arange(1, m+1))
full[~full.isin(df[0])].values
# array([6, 9])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句