簡體   English   中英

在Pandas中將Unix紀元時間轉換為日期時間

[英]Convert Unix epoch time to datetime in Pandas

我一直在尋找解決問題的方法。

我使用下面的代碼從我想要的列中獲取數據

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時間輸出為用戶的可讀格式?

我對代碼有點新意,所以如果你回答,如果可以的話,請你解釋一下推理嗎?

熊貓可以讀取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')

您的問題與將您已閱讀的值(看起來像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'的新列,並通過讀取x'Time'列並計算Unix紀元后的x秒來填充它。

注意:如果要將這些datetime時間對象轉換為您指定的時間字符串,我們可以通過使用strftime()創建一個新列來完成此操作:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM