python-3.x - 过滤没有任何 NaN 的行,并且日期在 Pandas 中是连续的
问题描述
让我们有一个df
日期列是连续的:
date a b c
0 2021-10-1 8.0 10 12.0
1 2021-10-2 NaN 16 NaN
2 2021-10-3 1.0 14 NaN
3 2021-10-4 2.0 15 NaN
4 2021-10-5 3.0 16 5.0
5 2021-10-6 4.0 17 6.0
6 2021-10-7 9.0 22 11.0
7 2021-10-8 10.0 23 12.0
8 2021-10-9 11.0 24 13.0
9 2021-10-10 12.0 25 14.0
10 2021-10-11 13.0 26 NaN
11 2021-10-12 NaN 27 NaN
12 2021-10-13 NaN 28 NaN
我想过滤日期是连续的行,同时NaN
对于列没有a
,b
并且c
。
df.dropna(how='any')
,我得到:
date a b c
0 2021-10-1 8.0 10 12.0
4 2021-10-5 3.0 16 5.0
5 2021-10-6 4.0 17 6.0
6 2021-10-7 9.0 22 11.0
7 2021-10-8 10.0 23 12.0
8 2021-10-9 11.0 24 13.0
9 2021-10-10 12.0 25 14.0
但我希望即使它没有任何第一行也可以删除NaN
,因为它的日期与其他日期不连续:
date a b c
4 2021-10-5 3.0 16 5.0
5 2021-10-6 4.0 17 6.0
6 2021-10-7 9.0 22 11.0
7 2021-10-8 10.0 23 12.0
8 2021-10-9 11.0 24 13.0
9 2021-10-10 12.0 25 14.0
我如何在 Pandas 中实现这一点?谢谢。
解决方案
解决方案
df[df["date"].diff().eq(pd.Timedelta("1 day"))].dropna()
解释
这将计算 `date1 列中连续元素之间的差异
df["date"].diff()
这会将差异与 1 天进行比较,并产生一系列真/假值
df["date"].diff().eq(pd.Timedelta("1 day"))
我们可以使用它来过滤以删除数据中没有第二天的任何行。
最后一步是调用.dropna
which 删除任何包含NaN
值的行