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

Posted

技术标签:

【中文标题】删除数据框中的列,其中 2 个日期之间的值为 NaN【英文标题】:Drop columns in a dataframe where values between 2 dates are NaN 【发布时间】:2021-12-21 17:52:56 【问题描述】:

我无法弄清楚这一点。我搜索了很多网站并关注了很多视频,但我只是被卡住了。我相信解决方案很简单......感谢所有帮助!

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

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

感谢您的帮助!

【问题讨论】:

【参考方案1】:

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

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)

【讨论】:

谢谢。工作出色。非常感谢。

以上是关于删除数据框中的列,其中 2 个日期之间的值为 NaN的主要内容,如果未能解决你的问题,请参考以下文章

如何删除R数据框中的列[重复]

Spark基于其他数据框中的列对数据框中的列进行重复数据删除

如何在R中的数据框中转换日期/时间列

按日期范围删除数据框中的行。

在计算 Pandas 创建的数据框中的列的平均值时指定“跳过 NA”

如何根据列的值对熊猫数据框中的列进行分类?