繁体   English   中英

告诉熊猫DataFrame中丢失的行的最佳方法是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM