我正在使用python 3.5.2,pandas 0.18.1和sqlite3。將UNIX時間戳轉換爲系列的pandas.tslib.Timestamp和datetime
以我的數據的基礎上,我有一個柱unix_time
與INT
爲自1970年以來理想我想讀從源碼我的數據幀秒,然後創建一個time
柱,其將對應於datetime
或pandas.tslib.Timestamp
轉換unix_time
柱的我只能用於某些處理,然後在保存數據幀之前丟棄它。
的問題是,當解析使用unix_time
柱:
df = pd.read_from_sql_query("SELECT * FROM test", con, parse_dates=['unix_time'])
我獲得pandas.tslib.Timestamp
類型是罰款,我的處理,但後來我不得不使用重建我原來unix_time
柱:
df['unix_time'][i] = (df['unix_time'][i] - datetime(1970,1,1)).total_seconds()
這真的很髒'
第一個問題:你有更好的方法嗎?
我想過放棄UNIX時間格式,只使用datetime
格式,但實際上pandas.tslib.Timestamp
大熊貓返回to_datetime
方法......不管怎樣,這樣做會迫使我遍歷所有行這是一個壞的解決方案。 (這是不可能在數據幀的單細胞上不是視圖別的什麼應用to_datetime
第二個問題:是否有可能應用在一個系列
我最後的嘗試是直接使用? 。df['time'] = datetime.datetime.fromtimestamp(df['unix_time'])
但出人意料的是,它也返回pandas.tslib.Timestamp
最後,知道我只能保存UNIX時間戳或日期時間,我只能選擇暫時是:
解析但不得不將其轉換回unix時間戳一個由 一個。
或不解析它,但必須逐個將它們轉換爲
pandas.tslib.Timestamp
。
如果我可以轉換整個系列,那將會很棒。
最後一個問題:有沒有一種方法來轉換一個UNIX時間戳系列datetime
(或至少pandas.tslib.Timestamp
),或pandas.tslib.Timestamp
(或datetime
)系列UNIX時間戳?
感謝
編輯: 在我處理,我解壓,我要追加到我的數據集的行。顯然,丁文到pandas.tslib.Timestamp
從數據幀傳遞到意甲時追加含蓄:
df = pd.DataFrame({'UNX':pd.date_range('2016-01-01', freq='9999S', periods=10).astype(np.int64)//10**9})
df['Date'] = pd.to_datetime(df.UNX, unit='s')
print(df.Date.dtypes)
print(type(df['Date'][0]))
test = df.iloc[0]
print(type(test.Date))
new_df = test.to_frame().transpose() #from here, impossible to do : new_df.to_sql("test", con) because the type for 'Date' is not supported
print(new_df.Date.dtypes)
回報
datetime64[ns]
<class 'pandas.tslib.Timestamp'>
<class 'pandas.tslib.Timestamp'>
object
有沒有辦法在new_df
「日期」從pandas.tslib.Timestamp
轉換爲datetime64[ns]
或datetime.datetime
(或簡單地str
)?
感謝您的澄清,它幫助我更準確地看到我遇到的問題。事實上,使用這種方式一切正常。我將編輯我的問題,以顯示類型混亂的地方。 – amougel