332 | def dropcols(df, start=None, end=None): |
333 | """Drop columns that contain NaN within [start, end] inclusive. |
334 | |
335 | A wrapper around DataFrame.dropna() that builds an easier *subset* |
336 | syntax for tseries-indexed DataFrames. |
337 | |
338 | Parameters |
339 | ---------- |
340 | df : DataFrame |
341 | start : str or datetime, default None |
342 | start cutoff date, inclusive |
343 | end : str or datetime, default None |
344 | end cutoff date, inclusive |
345 | |
346 | Example |
347 | ------- |
348 | df = DataFrame(np.random.randn(10,3), |
349 | index=pd.date_range('2017', periods=10)) |
350 | |
351 | # Drop in some NaN |
352 | df.set_value('2017-01-04', 0, np.nan) |
353 | df.set_value('2017-01-02', 2, np.nan) |
354 | df.loc['2017-01-05':, 1] = np.nan |
355 | |
356 | # only col2 will be kept--its NaN value falls before `start` |
357 | print(dropcols(df, start='2017-01-03')) |
358 | 2 |
359 | 2017-01-01 0.12939 |
360 | 2017-01-02 NaN |
361 | 2017-01-03 0.16596 |
362 | 2017-01-04 1.06442 |
363 | 2017-01-05 -1.87040 |
364 | 2017-01-06 -0.17160 |
365 | 2017-01-07 0.94588 |
366 | 2017-01-08 1.49246 |
367 | 2017-01-09 0.02042 |
368 | 2017-01-10 0.75094 |
369 | |
370 | """ |
371 | |
372 | if isinstance(df, Series): |
373 | raise ValueError("func only applies to `pd.DataFrame`") |
374 | if start is None: |
375 | start = df.index[0] |
376 | if end is None: |
377 | end = df.index[-1] |
378 | subset = df.index[(df.index >= start) & (df.index <= end)] |
379 | return df.dropna(axis=1, subset=subset) |