删除数据框中的列,其中 2 个日期之间的值为 NaN

Drop columns in a dataframe where values between 2 dates are NaN

这个我想不通。我在谷歌上搜索了很多网站并关注了很多视频,但我只是被困住了。我相信解决方案很简单....感谢所有帮助!

我有一个日期框,输出如下(日期是索引):

Date        col1   col2   col3   col4   col5  
1959-01-01   NaN    NaN   1.35   4.21    NaN
1959-02-01   NaN    NaN   2.14   6.30    5.75
1959-03-01   1.97   NaN   NaN    7.35    6.23
1959-04-01   2.19   3.14  NaN    NaN     7.15
1959-05-01   3.16   2.74  NaN    NaN     8.42
1959-06-01   2.91   3.63  NaN    NaN     8.36
1959-07-01   2.72   4.98  NaN    NaN     NaN

我想删除在日期 1959-03-01 和 1959-06-01 之间具有 NaN 的列。我希望输出看起来像这样:

Date        col1      col5  
1959-01-01   NaN      NaN
1959-02-01   NaN      5.75
1959-03-01   1.97     6.23
1959-04-01   2.19     7.15
1959-05-01   3.16     8.42
1959-06-01   2.91     8.36
1959-07-01   2.72     NaN

感谢您的帮助!

首先,您需要找到日期的索引:

a = np.where(df['Date'] == '1959-03-01')[0]
b = np.where(df['Date'] == '1959-06-01')[0]

其次,您需要检查每个日期之间的列:

to_drop = []
for column in df.columns:
    check = df[column].between(a, b, inclusive='both')
    if any(np.isnan(check)): to_drop.append(column)

第三,需要删除符合条件的列:

df = df.drop(to_drop, axis=1)