我有一个以Datetime为索引的pandas数据帧。该指数通常单调增加,但似乎有几行不遵循这一步。有哪些快速识别这些不寻常的行?
答案 0 :(得分:0)
"连结"在什么资源方面?如果您希望编程更容易,那么只需通过减去相邻列来生成新帧。零或负值的任何输入都是您的目标。
如果您需要执行速度,请注意仍然需要相邻差异:您可以保存的只是在给定行中查找多个违规的开销。但是,除非您拥有特别宽的数据框,否则您在短路中损失的可能性超过您通过保存的减法获得的损失。另请注意,具有矩阵运算或其他并行性的处理器对整个数据帧来说足够快,检查将花费您大量时间。
答案 1 :(得分:0)
考虑以下演示:
In [156]: df
Out[156]:
val
2017-01-01 0.889887
2017-01-02 0.838433
2017-01-03 0.977659
2017-01-04 0.750143
2017-01-05 0.271435
1970-01-01 0.138332 # <---- !!!
2017-01-07 0.673203
2017-01-08 0.497589
1999-01-01 0.592959 # <---- !!!
2017-01-10 0.818760
In [157]: df.loc[df.index.to_series().diff() < pd.to_timedelta('0 seconds')]
Out[157]:
val
1970-01-01 0.138332
1999-01-01 0.592959
In [158]: df.index.to_series().diff() < pd.to_timedelta('0 seconds')
Out[158]:
2017-01-01 False
2017-01-02 False
2017-01-03 False
2017-01-04 False
2017-01-05 False
1970-01-01 True
2017-01-07 False
2017-01-08 False
1999-01-01 True
2017-01-10 False
dtype: bool
In [159]: df.index.to_series().diff()
Out[159]:
2017-01-01 NaT
2017-01-02 1 days
2017-01-03 1 days
2017-01-04 1 days
2017-01-05 1 days
1970-01-01 -17171 days
2017-01-07 17173 days
2017-01-08 1 days
1999-01-01 -6582 days
2017-01-10 6584 days
dtype: timedelta64[ns]