在Pandas中将Unix纪元时间转换为日期时间

时间:2018-04-20 20:26:22

标签: python excel pandas matplotlib

我一直在寻找解决问题的方法。

我使用下面的代码

从我想要的列中获取数据
import pandas as pd
df = pd.read_excel("Live_data_test.xlsx","Sheet1")

number_of_entries = len(df.loc[:, 'Time'])
number_of_entries_last_3 = number_of_entries - 3
unix_x1 = df.loc[number_of_entries_last_:number_of_entries, 'Time']
print(unix_x1)

我得到了输出

10    1.513753e+09
11    1.513753e+09
12    1.513753e+09
Name: Time, dtype: float64

我想将此时间转换为可读时间,以便将其输入到matplotlib图的x轴中。

real_x1 = datetime.datetime.strptime(str(unix_x1), '%Y-%m-%d %H:%M:%S')

我收到错误

ValueError: time data '10    1.513753e+09\n11    1.513753e+09\n12    1.513753e+09\nName: Time, dtype: float64' does not match format '%Y-%m-%d %H:%M:%S'

如何将此unix时间输出为用户的可读格式?

我对代码有点新意,所以如果你回答,如果可以的话,请你解释一下推理吗?

3 个答案:

答案 0 :(得分:4)

Pandas可以读取unix纪元时间,使用单位参数

pd.to_datetime('1.513753e+09', unit = 's')

Timestamp('2017-12-20 06:56:40')

您可以使用

传递专栏
pd.to_datetime(df[<your_datetime_column>], unit = 's')

答案 1 :(得分:1)

您的问题与将您已阅读的值(看起来像Unix纪元后的秒数,即1970年1月1日)转换为datetime个对象有关。你得到的错误是因为你的时间只是一个浮点数,但这不是你试图处理它们的方式。

假设这些是在Unix纪元之后的几秒钟,您需要从定义为Unix纪元的起点使用timedelta创建日期时间:

from datetime import datetime, timedelta
start = datetime(1970, 1, 1)  # Unix epoch start time
df['datetime'] = df.Time.apply(lambda x: start + timedelta(seconds=x))

最后一行在您的数据框中创建一个名为'datetime'的新列,并通过阅读'Time'中的x列并计算时间x秒来填充该列Unix时代。

注意:如果您要将这些datetime个对象转换为您指定的时间字符串,我们可以通过创建一个包含strftime()的新列来执行此操作:

df['string_time'] = df.datetime.apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S'))

答案 2 :(得分:0)

你可以试试 df['Time'] = pd.to_datetime(df['Time'], format='%Y%m%d.0')