DatetimeArray._from_sequence with mixture of tz-naive and tz-aware data. · Issue #24569 · pandas-dev/pandas (original) (raw)

This should probably raise

In [1]: import pandas as pd; import numpy as np

In [2]: arr = np.array([pd.Timestamp('2000'), pd.Timestamp('2000', tz='CET')])

In [3]: pd.arrays.DatetimeArray._from_sequence(arr) Out[3]: ['2000-01-01 01:00:00+01:00', '2000-01-01 00:00:00+01:00'] Length: 2, dtype: datetime64[ns, CET]

For reference, a mix of different timezones does raise

In [4]: mix = np.array([pd.Timestamp('2000', tz="US/Central"), pd.Timestamp('2000', tz='CET')])

In [5]: pd.arrays.DatetimeArray._from_sequence(mix)

ValueError Traceback (most recent call last) ~/sandbox/pandas/pandas/core/arrays/datetimes.py in objects_to_datetime64ns(data, dayfirst, yearfirst, utc, errors, require_iso8601, allow_object) 1753 try: -> 1754 values, tz_parsed = conversion.datetime_to_datetime64(data) 1755 # If tzaware, these values represent unix timestamps, so we

~/sandbox/pandas/pandas/_libs/tslibs/conversion.pyx in pandas._libs.tslibs.conversion.datetime_to_datetime64() 178 if not tz_compare(val.tzinfo, inferred_tz): --> 179 raise ValueError('Array must be all same time zone') 180 else:

ValueError: Array must be all same time zone

During handling of the above exception, another exception occurred:

ValueError Traceback (most recent call last) in ----> 1 pd.arrays.DatetimeArray._from_sequence(mix)

~/sandbox/pandas/pandas/core/arrays/datetimes.py in _from_sequence(cls, data, dtype, copy, tz, freq, dayfirst, yearfirst, ambiguous) 326 subarr, tz, inferred_freq = sequence_to_dt64ns( 327 data, dtype=dtype, copy=copy, tz=tz, --> 328 dayfirst=dayfirst, yearfirst=yearfirst, ambiguous=ambiguous) 329 330 freq, freq_infer = dtl.validate_inferred_freq(freq, inferred_freq,

~/sandbox/pandas/pandas/core/arrays/datetimes.py in sequence_to_dt64ns(data, dtype, copy, tz, dayfirst, yearfirst, ambiguous) 1660 # or M8[ns] to denote wall times 1661 data, inferred_tz = objects_to_datetime64ns( -> 1662 data, dayfirst=dayfirst, yearfirst=yearfirst) 1663 tz = maybe_infer_tz(tz, inferred_tz) 1664

~/sandbox/pandas/pandas/core/arrays/datetimes.py in objects_to_datetime64ns(data, dayfirst, yearfirst, utc, errors, require_iso8601, allow_object) 1757 return values.view('i8'), tz_parsed 1758 except (ValueError, TypeError): -> 1759 raise e 1760 1761 if tz_parsed is not None:

~/sandbox/pandas/pandas/core/arrays/datetimes.py in objects_to_datetime64ns(data, dayfirst, yearfirst, utc, errors, require_iso8601, allow_object) 1748 dayfirst=dayfirst, 1749 yearfirst=yearfirst, -> 1750 require_iso8601=require_iso8601 1751 ) 1752 except ValueError as e:

~/sandbox/pandas/pandas/_libs/tslib.pyx in pandas._libs.tslib.array_to_datetime() 458 @cython.wraparound(False) 459 @cython.boundscheck(False) --> 460 cpdef array_to_datetime(ndarray[object] values, str errors='raise', 461 bint dayfirst=False, bint yearfirst=False, 462 object utc=None, bint require_iso8601=False):

~/sandbox/pandas/pandas/_libs/tslib.pyx in pandas._libs.tslib.array_to_datetime() 535 iresult[i] = _ts.value 536 else: --> 537 raise ValueError('Tz-aware datetime.datetime ' 538 'cannot be converted to ' 539 'datetime64 unless utc=True')

ValueError: Tz-aware datetime.datetime cannot be converted to datetime64 unless utc=True