【问题标题】:Convert Unix epoch time to datetime in Pandas在 Pandas 中将 Unix 纪元时间转换为日期时间
【发布时间】:2018-10-01 14:52:32
【问题描述】:

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

我使用下面的代码从我想要的列中获取数据

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 时间输出为用户可读的格式?

我对代码有点陌生,所以如果你回答,如果可以的话,你能解释一下原因吗?

【问题讨论】:

    标签: python excel pandas matplotlib


    【解决方案1】:

    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')
    

    【讨论】:

    • 严重低估的答案。应该有绿色检查
    【解决方案2】:

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

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

    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 并计算 Unix 纪元后的时间 x 秒来填充它。

    注意:如果您想将这些datetime 对象转换为您指定的时间字符串,我们可以通过使用strftime() 创建一个新列来实现:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 注意增强您的答案,添加这样做的原因,也许还有一些文档以获得更好的答案
      猜你喜欢
      • 1970-01-01
      • 2016-09-15
      • 2013-01-08
      • 2018-12-27
      • 2018-08-03
      • 2013-04-02
      • 1970-01-01
      • 2012-09-06
      相关资源
      最近更新 更多