Почему pandas dataframe tolist возвращает datetime в качестве значений - PullRequest
0 голосов
/ 25 сентября 2018

Итак, у меня есть этот кадр данных pandas, который я хочу сохранить в базе данных postgres. Я хочу сохранить дату и время как метку времени с часовым поясом.

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)

И я получаю

[Метка времени ('2018-04-01 00: 00: 00 + 0900', tz = 'Азия / Токио') 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)

, я получаюзначения вместо datetime.

(1522508400000000000, 1, 1, 3000.0)

, что я пробовал до сих пор.

df['datetime']=df['datetime'].dt.to_pydatetime()

, ноэто не сработало.Я нашел это решение Pandas DataFrame Date Series для преобразования списка , но это не помогло в моем случае.Он показывает только один конкретный столбец, в то время как я хочу сделать это для всех столбцов.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Без какой-либо информации о том, как выглядит фрейм данных, и при условии, что вывод должен быть списком кортежей, а часть 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'>

Однако я все равно использовал бы ответ Джона Цвинка - сделайте их строками и преобразовайте их после, если вам нужно.

0 голосов
/ 25 сентября 2018

Сначала необходимо преобразовать столбец даты в строки:

df['datetime'] = df['datetime'].apply(str)

Затем:

df.values.tolist()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...