python - 用于选择满足特定条件的日期范围的 for 循环
问题描述
我有以下季度数据。但是有些日期没有数据。我想创建一个循环遍历索引并检查资产列中的日期是否为 NaN。如果是,则创建一个新的数据框,其中包含没有 NaN 且循环中断的数据框部分。
例如,循环在 2018 年 9 月 30 日到 2016 年 9 月 30 日之间开始,一切正常,然后在下一次迭代中有 NaN(2016 年 6 月 30 日),所以我想创建一个包含行的数据框在 2018 年 9 月 30 日到 2016 年 9 月 30 日之间,循环中断。
注意:它必须进行某种迭代,因为我想用许多 excel 来做这件事,而对于一些 excel,NaN 开始的确切日期可能在不同的时间。
date assets debt
9/30/2018 4193 1824
6/30/2018 4281 1929
3/31/2018 4149 1460
12/31/2017 4238 1404
9/30/2017 3804 1401
6/30/2017 3583 1437
3/31/2017 3404 1451
12/31/2016 3181 1445
9/30/2016 3622 1478
6/30/2016 NaN NaN
3/31/2016 NaN NaN
12/31/2015 2566 225
9/30/2015 NaN NaN
6/30/2015 NaN NaN
3/31/2015 NaN NaN
12/31/2014 2917 342
这是我到目前为止所尝试的:
for date in df.index:
if df['assets'][df.index == date].empty == True:
newdf = df[df.index > date]
break
解决方案
您可以使用该numpy
方法isnan
提取索引,然后索引以获取其余部分。
idx = np.isnan(df.assets).idxmax() # this is one way
idx = df.assets.isna().idxmax() # this is another way
newdf = df.iloc[:idx]
date assets debt
0 9/30/2018 4193.0 1824.0
1 6/30/2018 4281.0 1929.0
2 3/31/2018 4149.0 1460.0
3 12/31/2017 4238.0 1404.0
4 9/30/2017 3804.0 1401.0
5 6/30/2017 3583.0 1437.0
6 3/31/2017 3404.0 1451.0
7 12/31/2016 3181.0 1445.0
8 9/30/2016 3622.0 1478.0
在读取文件时将其置于循环中应该是微不足道的。
推荐阅读
- c++ - 从作为函数模板中的类型参数的结构中获取所有可变参数模板类型
- hazelcast - Hazelcast:IMap 和 ISemaphore 中跨分区的数据分布差异
- sql - 接受 SQL 查询并在后台运行的服务
- javascript - 为什么“this”在 render() 中有效,但在其他函数中无效
- python - 试图拆分 csv 不断得到 'DataFrame' 对象没有属性 'split' 错误
- reactjs - 为什么在使用 Jest 时不需要导入一些东西?
- vue.js - 如何在组件(兄弟)Vue之间传输数据?
- css - 固定宽度大于内容的 CSS 网格
- maven - 当使用 testng 并行运行自动生成的测试运行器时,面临以下异常
- jquery - 想要在 Bootstrap 日期时间选择器中禁用特定日期的特定时段