Skip to content

Pandas NaT times cause unexpected behaviour #19

Open
@GalenReich

Description

@GalenReich

Currently if a datetime holding the NaT value (supported by Numpy and Pandas) is passed to get_position it returns results for 12:12:43 UTC on Tuesday, September 21, 1677!

Minimum example to reproduce:

import pandas as pd
from suncalc import get_position

# Create DatetimeIndex containing NaTs
test_pandas_df = pd.to_datetime([None, None], unit="s", utc=True) 

print(get_position(test_pandas_df, 0, 0))

Gives: {'azimuth': Index([-0.9723467728956097, -0.9723467728956097], dtype='float64'), 'altitude': Index([-1.5207425775049375, -1.5207425775049375], dtype='float64')}

The bug is introduced by the coercion in get_milliseconds, which returns -9223372036854.775 (ms) for NaT values. This time offset from the UNIX epoch corresponds to the above date in 1677!

# Pandas series of Pandas datetime objects
if pd and pd.api.types.is_datetime64_any_dtype(date):
# A datetime-like series coerce to int is (always?) in nanoseconds
return date.astype('int64') / 10 ** 6

Instead, it would be great if NaT values were handled gracefully and None or np.nan values were returned instead. Alternatively, an error could be raised indicating that NaT values are unsupported.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions