[英]What's the best way to tell the missing row in pandas DataFrame?
我是Python的新手-熊猫,目前正尝试使用它来检查DataFrame中的数据是否连续。 例如:
thread sequence start end
14 1 114 1647143 1672244
15 1 115 1672244 1689707
16 1 116 1689707 1713090
17 1 118 1735352 1760283
18 1 119 1760283 1788062
19 1 120 1788062 1789885
20 1 121 1789885 1790728
每行拥有4列,通常应按步骤1进行增加,因此,如果一切正确,则将看起来像116,117,118 ...,类似于range()函数。 但是这里的示例缺少序列== 117的行。
我试图找到它,但我不知道该怎么做。 如果我只是一个接一个地检查序列,那将是低效的。 所需的输出将是告诉缺失的行或用NaN填充缺失的行。
任何好的技巧或建议都会有所帮助。
使用RangeIndex
的更快方法:
seq = pd.RangeIndex(df.sequence.min(), df.sequence.max())
seq[~seq.isin(df.sequence)].values
# array([117])
如果只想获取缺少的序列值,可以执行以下操作:
>>> seq = pd.DataFrame(np.arange(df.iloc[0].sequence, df.iloc[-1].sequence))
>>> seq[~seq[0].isin(df.sequence)]
0
3 117
我希望看到您想要的输出,但是请检查以下内容。
test = df.set_index('sequence').reindex(range(df['sequence'].min(), df['sequence'].max())).reset_index()
print(test)
sequence thread start end
0 114 1.0 1647143.0 1672244.0
1 115 1.0 1672244.0 1689707.0
2 116 1.0 1689707.0 1713090.0
3 117 NaN NaN NaN
4 118 1.0 1735352.0 1760283.0
5 119 1.0 1760283.0 1788062.0
6 120 1.0 1788062.0 1789885.0
print(test[test['thread'].isnull()]['sequence'].tolist())
[117]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.