我是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填充缺失的行。
任何好的提示或建议都会有所帮助。
答案 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]