簡體   English   中英

在熊貓中處理時區天真的約會時間

[英]Dealing with timezone naive datetimes in Pandas

我有一些包含時區天真日期的JSON數據。

["2014-03-07T09:04:26.943", "2014-03-06T20:35:21.937", "2014-02-25T12:39:44"]

我使用pandas.read_json讀取此數據,並將其視為對象列。

我知道數據是在太平洋時區,而不是UTC。

是否有矢量化方式將其轉換為np.datetime64列? 目前,我正在做:

def _parse_datetime(dt_string):
    # We are provided timezone naive data that is in Pacific time. Convert it to UTC.
    timestamp = pd.Timestamp(dt_string, tz="US/Pacific")
    if pd.isnull(timestamp):
        return pd.NaT
    return np.datetime64(timestamp)

data.apply(_parse_datetime)

這對於大量數據來說真的很慢

更新:

通過指定convert_dates,我可以將數據強制轉換為datetime。 但是,在嘗試本地化時,我收到錯誤:

>>> dates = """["2014-03-07T09:04:26.943", "2014-03-06T20:35:21.937", "2014-02-25T12:39:44"]""" 
>>> baz = pd.read_json(dates, convert_dates=[0])[0]
>>> baz.tz_localize('US/Pacific')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/abeer/.virtualenvs/venv/lib/python2.7/site-packages/pandas/core/generic.py", line 3494, in tz_localize
ax_name)
TypeError: index is not a valid DatetimeIndex or PeriodIndex

更一般地說,我正在嘗試為數據框中的列執行此操作,因此我無法修改索引。

使用convert_dates選項指定列,或使用系列類型選項自動轉換。

>>> pd.read_json(dates, convert_dates=[0])[0]
0   2014-03-07 09:04:26.943000
1   2014-03-06 20:35:21.937000
2          2014-02-25 12:39:44
Name: 0, dtype: datetime64[ns]
>>> pd.read_json(dates, typ='series')
0   2014-03-07 09:04:26.943000
1   2014-03-06 20:35:21.937000
2          2014-02-25 12:39:44
dtype: datetime64[ns]

從那里你可以在時間戳上使用tz_localize 假設這太慢了......

baz.apply(lambda ts: ts.tz_localize('US/Pacific'))

內聯的tz_localize適用於索引(而不是值):

>>> pd.Series(index=baz).tz_localize('US/Pacific')
0
2014-03-07 09:04:26.943000-08:00   NaN
2014-03-06 20:35:21.937000-08:00   NaN
2014-02-25 12:39:44-08:00          NaN
dtype: float64

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM