#python #pandas #datetime #timestamp
#python #pandas #datetime #метка времени
Вопрос:
Я знаю, что этот вопрос был опубликован несколько раз раньше, но все же у меня мало сомнений. У меня есть datetime.date
(например mydate = date(2014,5,1)
), и я преобразовал это в строку, а затем сохранил в БД в виде столбца (dtype:object)
в таблице. Теперь я хотел изменить хранение дат с текста на метку времени в БД. Я попробовал это,
Пример. Моя таблица tab1
. Я прочитал это как dataframe df
в python.
# datetime to timestamp
df['X'] = pd.to_datetime(mydate)
Когда я проверяю dtype в редакторе python df.info()
, dtype X равен datetime64[ns], но когда я сохраняю это в DB в MySQL и снова считываю как dataframe в python, dtype изменяется как object . У меня есть тип данных как datetime в MySQL, но мне это нужно как тип данных метки времени в MySQL. Есть ли какой-нибудь способ сделать это? Кроме того, мне нужна только дата Timestamp('2014-5-01 00:00:00')
и время исключения.
Комментарии:
1. Имеет ли ваш столбец в MySQL тип Date?
2. В MySQL это datetime
Ответ №1:
Проблема в том, что когда вы считываете сериализованное значение из MySQL, соединитель python MySQL не преобразует его. вы должны преобразовать его в значение DateTime после считывания данных с курсора, снова вызвав свою функцию для извлеченных данных:
df['X'] = pd.to_datetime(df['col'])
Комментарии:
1. Хорошо, но я хочу иметь тип данных в качестве метки времени в MySQL вместо datetime. (отображение только даты)
2. Поэтому выберите тип метки ВРЕМЕНИ в MySQL в качестве типа столбца…
3. Есть идеи, как я могу это сделать с помощью python?
4. Вы проверили df[‘datetime’] = df[‘datetime’].apply(лямбда x: pd.Timestamp(x))?
5. Да, я только что пробовал использовать pd. Временная метка, но все же тип данных в MySQL — datetime 🙁
Ответ №2:
Как и было предложено, я изменил тип столбца напрямую, используя dtype
аргумент в to_sql()
функции при вставке в базу данных. Итак, теперь у меня могут быть типы данных, как TIMESTAMP, DATETIME
и DATE
в MySQL.
Ответ №3:
для меня это работает:
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d')
df['timestamp'] = df['Date'].apply(lambda x: x.timestamp())