Python中文
首页
教程
问答
标签
搜索
登录
注册
更改pandas中日期时间列的时区并添加为分层索引
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我有UTC时间戳的数据。我想将这个时间戳的时区转换为“US/Pacific”,并将其作为分层索引添加到pandas数据帧中。我已经能够将时间戳转换为索引,但是当我尝试将其作为列或索引添加回数据帧时,它会丢失时区格式。</p> <pre><code>>>> import pandas as pd >>> dat = pd.DataFrame({'label':['a', 'a', 'a', 'b', 'b', 'b'], 'datetime':['2011-07-19 07:00:00', '2011-07-19 08:00:00', '2011-07-19 09:00:00', '2011-07-19 07:00:00', '2011-07-19 08:00:00', '2011-07-19 09:00:00'], 'value':range(6)}) >>> dat.dtypes #datetime object #label object #value int64 #dtype: object </code></pre> <p>现在,如果我试图直接转换序列,我会遇到一个错误。</p> <pre><code>>>> times = pd.to_datetime(dat['datetime']) >>> times.tz_localize('UTC') #Traceback (most recent call last): # File "<stdin>", line 1, in <module> # File "/Users/erikshilts/workspace/schedule-detection/python/pysched/env/lib/python2.7/site-packages/pandas/core/series.py", line 3170, in tz_localize # raise Exception('Cannot tz-localize non-time series') #Exception: Cannot tz-localize non-time series </code></pre> <p>如果我把它转换成一个索引,我就可以把它作为一个时间序列来处理。请注意,该指数现在有太平洋时区。</p> <pre><code>>>> times_index = pd.Index(times) >>> times_index_pacific = times_index.tz_localize('UTC').tz_convert('US/Pacific') >>> times_index_pacific #<class 'pandas.tseries.index.DatetimeIndex'> #[2011-07-19 00:00:00, ..., 2011-07-19 02:00:00] #Length: 6, Freq: None, Timezone: US/Pacific </code></pre> <p>但是,现在在将索引添加回数据帧时遇到问题,因为它丢失了时区格式:</p> <pre><code>>>> dat_index = dat.set_index([dat['label'], times_index_pacific]) >>> dat_index # datetime label value #label #a 2011-07-19 07:00:00 2011-07-19 07:00:00 a 0 # 2011-07-19 08:00:00 2011-07-19 08:00:00 a 1 # 2011-07-19 09:00:00 2011-07-19 09:00:00 a 2 #b 2011-07-19 07:00:00 2011-07-19 07:00:00 b 3 # 2011-07-19 08:00:00 2011-07-19 08:00:00 b 4 # 2011-07-19 09:00:00 2011-07-19 09:00:00 b 5 </code></pre> <p>您会注意到索引回到了UTC时区,而不是转换后的太平洋时区。</p> <p>如何更改时区并将其作为索引添加到数据帧?</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>到现在为止,这个问题已经解决了。例如,现在可以调用:</p> <pre><code>dataframe.tz_localize('UTC', level=0) </code></pre> <p>不过,对于给定的示例,您必须调用它两次。(即每层一次。)</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何在乒乓球比赛中预测球的轨迹,对于AI球拍预测?
7 回答
如何在乒乓球游戏中阻止球
1 回答
如何在乘法和模中不乘空间?
7 回答
如何在乘法和除以2个不同的数字之间进行交换?
1 回答
如何在也是数据一部分的单个字符上拆分大字符串
4 回答
如何在乾草堆中找到針,有更好的解決方案嗎?
3 回答
如何在事件wxWidgets中传递自定义数据
6 回答
如何在事件中使用lambda i=i?
3 回答
如何在事件中心只接收最近的数据
10 回答
如何在事件发生之前保持云函数运行?
9 回答
如何在事件发生后使页面重定向到同一页面
4 回答
如何在事件回调之间保持python生成器的状态
8 回答
如何在事件处理程序(pythonsocket、sphinx)中保留docstring
7 回答
如何在事件处理程序中更改wxRichTextCtrl的光标位置?
1 回答
如何在事件处理程序中访问外部对象?
2 回答
如何在事件循环中将协程打包为正常函数?
4 回答
如何在事件循环之外运行协同程序?
1 回答
如何在事件循环结束时为并发未来的所有线程调用类方法?
6 回答
如何在事件文件中只保留一份摘要?
7 回答
如何在事件模板中添加事件
2 回答