所以我有这个熊猫数据框要保存在postgres数据库中。我想将datetime保留为带时区的时间戳。
df.set_index(['datetime', 'area_id'], inplace=True)
df = df.tz_localize('Asia/Tokyo', level=0)
df.reset_index(inplace=True)
print(df[0].values)
我得到
[Timestamp('2018-04-01 00:00:00 + 0900',tz ='Asia / Tokyo')1 1 3000.0]
无论如何,即使我想要日期时间,数据框也将成为值。 我想要的是 [('2018-04-01 00:00:00 + 0900',1,1,3000.0)]
但是我运行这段代码
d = list(zip(*[df[c].values.tolist() for c in df])
print(d)
我得到的是值而不是日期时间。
(1522508400000000000,1,1,3000.0)
到目前为止我尝试过的。
df['datetime']=df['datetime'].dt.to_pydatetime()
但是没有用。 我找到了此解决方案Pandas DataFrame Date Series to List conversion 但这对我的情况没有帮助。它只显示一个特定的列,而我想为所有列都做。
答案 0 :(得分:0)
您需要先将日期列转换为字符串:
df['datetime'] = df['datetime'].apply(str)
然后:
df.values.tolist()
答案 1 :(得分:0)
在没有有关数据帧外观的任何信息的情况下,并假设输出需要为元组列表,并且元组的datetime
部分实际上需要为datetime
:
import numpy as np
import pandas as pd
from datetime import datetime
df = pd.DataFrame({'a':[1,2,3],
'b':['foo','bar','foobar'],
'dt_var':np.array(['2018-01-01T12:00', '2018-02-03T00:00:01', '1018-09-01T15:15'], dtype='datetime64')})
s = df['dt_var'].dt.to_pydatetime()
cols_to_zip = list(df.columns.values)
cols_to_zip.remove('dt_var')
d = [(*x,y) for x in df[cols_to_zip].values for y in s ]
print(type(d[0][2]))
<class 'datetime.datetime'>
尽管如此,我仍然会使用John Zwinck的答案-将它们制成字符串,并在需要后将其重新转换。