Skip to content

BUG: first_valid_index() empty Series and DataFrame inconsistencies #9752

Closed
@wholmgren

Description

@wholmgren

I came across some inconsistencies in how first_valid_index() works on empty Series and DataFrames (and last_valid_index()).

>>> print(pd.DataFrame().first_valid_index())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/will/.virtualenvs/dev3/lib/python3.4/site-packages/pandas/core/frame.py", line 3332, in first_valid_index
    return self.index[self.count(1) > 0][0]
  File "/home/will/.virtualenvs/dev3/lib/python3.4/site-packages/pandas/core/index.py", line 915, in __getitem__
    return getitem(key)
IndexError: index 0 is out of bounds for axis 0 with size 0

>>> print(pd.Series().first_valid_index())
None

>>> print(pd.SparseDataFrame([]).first_valid_index())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/will/.virtualenvs/dev3/lib/python3.4/site-packages/pandas/core/frame.py", line 3332, in first_valid_index
    return self.index[self.count(1) > 0][0]
  File "/home/will/.virtualenvs/dev3/lib/python3.4/site-packages/pandas/core/ops.py", line 919, in f
    res = self._combine_const(other, func, raise_on_error=False)
TypeError: _combine_const() got an unexpected keyword argument 'raise_on_error'

>>> print(pd.SparseSeries([]).first_valid_index())
None

Is there a reason for this different behavior? Note also that the DataFrame/SparseDataFrame exceptions are different. Here's the DataFrame and Series methods. The Series method has a if len(self) == 0 check. I can make a PR if you think one of these should be changed and tell me which way you want to go.

For what it's worth, I came across this issue trying to use this function in a list comprehension to get a list of minimum times from a handful of Series, DataFrames, and SparseDataFrames that may or may not be empty. (Although it just occurred to me that I could, of course, put an if empty check in my list comprehension.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions