![](/img/trans.png)
[英]FutureWarning: Converting timezone-aware DatetimeArray to timezone-naive ndarray with 'datetime64[ns]' dtype
[英]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.