2017-12-02 330 views
1

我有一個數據幀與2列 - 一些值和時間。時間戳是時代格式,我試圖使用python中的時間庫中的strftime函數進行轉換。將時期轉換爲日期時間格式python - typeerror

下面是一些樣本數據

df = [{'A': 762, 'Time': 1512255906}, 
     {'A': 810, 'Time': 1480719906}] 

注:時間爲紀元格式。在執行日期轉換的strftime函數之前,我正在執行一些轉換以確保其類型爲numeric(float)

下面的代碼:

df['Time'] = pd.to_numeric(df['Time'], errors='coerce').fillna(0) 
df['Time'].dtype 

我收到一個錯誤使用時,在這條線

df['Time'] = time.strftime("%d-%m", time.localtime(df['Time'])) 

回溯:

TypeError Traceback (most recent call last) 
<ipython-input-53-86f4db0b80e4> in <module>() 
----> 1 df['Time'] = time.strftime("%d-%m", time.localtime(df['Time'])) 

TypeError: cannot convert the series to <class 'int'> 
+0

[你應該考慮接受一個答案(https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

+0

我接受他們。謝謝。 – keval

+2

如果您仔細閱讀鏈接頁面,它會解釋您只能接受一個。 –

回答

0

您可以使用pandas.DataFrame.apply

>>> import pandas as pd 
>>> import time 

>>> df = pd.DataFrame([{'A': 762, 'Time': 1512255906}, 
         {'A': 810, 'Time': 1480719906}]) 

>>> df['Time'] = pd.to_numeric(df['Time'], errors='coerce').fillna(0) 
>>> df['Time'] = df['Time'].apply(lambda t: time.strftime("%d-%m", time.localtime(t))) 

>>> df 
    A Time 
0 762 03-12 
1 810 03-12 
1

您可以傳遞unit參數pd.to_datetime以瞭解該數字代表的時間單位。在這種情況下,你從Time開始是從時代開始的秒數。所以我們通過's'作爲unit

df.assign(Time=pd.to_datetime(df.Time, unit='s').dt.strftime('%d-%m')) 
# For in place, use: 
# df.Time = pd.to_datetime(df.Time, unit='s').dt.strftime('%d-%m') 

    A Time 
0 762 02-12 
1 810 02-12 
+0

此解決方案適用於我。謝謝。 – keval

相關問題