呓语 | 杨英明的个人博客

专注于c++、Python,欢迎交流

By

Pandas 默认时间格式转换为 Unix 时间戳

Pandas读取csv文件时,时间会自动显示为‘YYYY-MM-DD HH:MM:SS’的格式,那么如果想要将这个时间转换为 Unix时间戳 呢?

先科普一下,什么是 Unix时间戳 呢?

Unix时间戳 是一种时间表示方式,是一个整型值,代表从格林威治时间1970年01月01日00时00分00秒起至现在经过的总秒数。

举个栗子:

一个值为 1492751843 的Unix时间戳 ==>
把它转换为 北京时间为 2017/4/21 13:17:23

实际上,Pandas中时间用 pandas.datetime() 转换为 pandas.tslib.Timestamp(时间戳) 格式之后,已经变成了整型存储,即 Unix时间戳形式 。

如果我们需要这个时间戳的整型格式,可以用 time[0].value 这个属性把它提取出来。

样例

>>> import pandas as pd     # 导入pandas库
>>> data = pd.read_csv('airquality.csv')        # 读入数据文件
>>> data.time = pd.to_datetime(data.time)   # 将时间那一列从str转换为时间戳格式
>>> type(data.time[0])      # 查看转换之后的格式
<class 'pandas.tslib.Timestamp'>
>>> data.time[0]            # 查看第一条数据,默认显示为‘YYYY-MM-DD HH:MM:SS’格式
Timestamp('2014-05-01 00:00:00')
>>> data.time[0].value  # 查看第一条数据的Unix时间戳格式
1398902400000000000L
>>> data.time[0].value//10**9   # 转换为秒级
1398902400L
>>> t1 = [t.value for t in data.time]   # 提取整列(纳秒级,即1s = 1,000,000,000 ns)
>>> t1[:3]      # 显示前三条数据
[1398902400000000000L, 1398906000000000000L, 1398909600000000000L]
>>> t2 = [t.value//10**9 for t in data.time]    # 提取整列(秒级)
>>> t2[:3]      # 显示前三条数据
[1398902400L, 1398906000L, 1398909600L]
>>> t1 = pd.DatetimeIndex(t1)       # 从list列表转换为pandas的DatetimeIndex格式
>>> t1[:3]      # 显示前三条数据
DatetimeIndex(['2014-05-01 00:00:00', '2014-05-01 01:00:00',
               '2014-05-01 02:00:00'],
              dtype='datetime64[ns]', freq=None)
>>> type(t1[0])     # 每条数据为Timestamp格式
<class 'pandas.tslib.Timestamp'>
>>> t1[0].value
1398902400000000000L

参考资料

Convert pandas DateTimeIndex to Unix Time? - stackoverflow

【Pandas-Cookbook】08:时间戳处理 - csdn

pandas小记:pandas时间序列分析和处理Timeseries - csdn

原创声明

转载请注明:呓语 » Pandas 默认时间格式转换为 Unix 时间戳