簡體   English   中英

使用時區感知和時區天真日期時間列處理 CSV

[英]Handling CSV with timezone-aware and timezone-naive datetime column

我有一個從 csv 導入的 Pandas 數據框,如下所示:

|date time|id|value|
|------|-------|---------|
|2019-10-08T01:00:00+01:00|1|35|
|2019-10-08T02:00:00+01:00|1|32|
|2019-10-08T03:00:00+01:00|1|33|
|2019-12-08T01:00:00Z|1|25|
|2019-12-08T01:00:00Z|1|15|
|2019-12-08T01:00:00Z|1|25|

當我嘗試進行這樣的聚合時:

data.groupby([data['Date'].dt.date]).agg(['mean', 'count'])

我收到這樣的錯誤:

ValueError: Cannot mix tz-aware with tz-naive values

另一個問題是,使用這些日期值而不是 UTC 值很重要,因為我將根據當地(英國)時間進行高峰時段分析。 解決這個問題的最佳方法是什么?

對於列date time作為字符串數據類型的給定示例,

df['date time']
0    2019-10-08T01:00:00+01:00
1    2019-10-08T02:00:00+01:00
2    2019-10-08T03:00:00+01:00
3         2019-12-08T01:00:00Z
4         2019-12-08T01:00:00Z
5         2019-12-08T01:00:00Z
Name: date time, dtype: object

使用pd.to_datetime和關鍵字utc=True轉換為日期時間數據類型,然后轉換為適當的時區:

df['date time'] = pd.to_datetime(df['date time'], utc=True).dt.tz_convert('Europe/London')

要得到

df['date time']
0   2019-10-08 01:00:00+01:00
1   2019-10-08 02:00:00+01:00
2   2019-10-08 03:00:00+01:00
3   2019-12-08 01:00:00+00:00
4   2019-12-08 01:00:00+00:00
5   2019-12-08 01:00:00+00:00
Name: date time, dtype: datetime64[ns, Europe/London]

現在groupby按預期工作:

df.groupby([df['date time'].dt.date]).agg(['mean', 'count'])
             id            value      
           mean count       mean count
date time                             
2019-10-08    1     3  33.333333     3
2019-12-08    1     3  21.666667     3

暫無
暫無

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

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