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

时间:2017-08-17 04:19:39

标签: python pandas

我是Python的新手 - 熊猫,目前正试图用它来检查DataFrame中的数据是否是连续的。例如:

An error occurred (InvalidParameterException) when calling the CreateService operation: Unable to assume role and validate the specified targetGroupArn. Please verify that the ECS service role being passed has the proper permissions.

每行拥有4列,一般顺序应该以1为步长增加,所以如果一切正确,它看起来像116,117,118 ......,就像range()函数一样。但是这里的示例缺少序列== 117的行。

我试图找到它,但我不知道该怎么做。如果我只是逐个检查序列,那将是低效的。所需的输出是告诉丢失的行或用NaN填充缺失的行。

任何好的提示或建议都会有所帮助。

3 个答案:

答案 0 :(得分:3)

如果您只想获取缺失的序列值,可以执行以下操作:

>>> seq = pd.DataFrame(np.arange(df.iloc[0].sequence, df.iloc[-1].sequence))
>>> seq[~seq[0].isin(df.sequence)]
    0
3   117

答案 1 :(得分:3)

使用RangeIndex的更快方法:

seq = pd.RangeIndex(df.sequence.min(), df.sequence.max())
seq[~seq.isin(df.sequence)].values
# array([117])

答案 2 :(得分:1)

我希望看到您想要的输出,但请查看以下内容。

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]