Pandas Python: дата ключевой ошибки - PullRequest
0 голосов
/ 06 января 2020

Я импортирую в python, где он автоматически создаст объект даты и времени.

Однако я хочу, чтобы первый столбец был объектом даты и времени в Python. Данные выглядят как

Date,cost
41330.66667,100
41331.66667,101
41332.66667,102
41333.66667,103

Текущий код выглядит так:

from datetime import datetime
import pandas as pd

data = pd.read_csv(r"F:\Sam\PJ\CSV2.csv")
data['Date'].apply(lambda x: datetime.strptime(x, '%d/%m/%Y'))

print(data)

Ответы [ 3 ]

0 голосов
/ 06 января 2020

Это выглядит как превосходный формат даты и времени. Это называется серийной датой. Чтобы преобразовать эту серийную дату, вы можете сделать это:

data['Date'].apply(lambda x: datetime.fromtimestamp( (x - 25569) *86400.0))

Какие выходные данные:

>>> data['Date'].apply(lambda x: datetime.fromtimestamp( (x - 25569) *86400.0))
0   2013-02-25 10:00:00.288
1   2013-02-26 10:00:00.288
2   2013-02-27 10:00:00.288
3   2013-02-28 10:00:00.288

Чтобы присвоить ее data['Date'], вы просто делаете:

data['Date'] = data['Date'].apply(lambda x: datetime.fromtimestamp( (x - 25569) *86400.0))

#df
                     Date  cost
0 2013-02-25 16:00:00.288   100
1 2013-02-26 16:00:00.288   101
2 2013-02-27 16:00:00.288   102
3 2013-02-28 16:00:00.288   103
0 голосов
/ 06 января 2020

К сожалению, read_csv не справляется со столбцами даты, указанными в виде чисел. Но хорошая новость в том, что Pandas имеет подходящую функцию для этого. После read_csv вызов:

df.Date = pd.to_datetime(df.Date - 25569, unit='D').dt.round('ms')

Как я понимаю, ваша Дата фактически является числом дней с 30.12.1899 (плюс дробное часть дня). Вышеуказанный «поправочный коэффициент» ( 25569 ) работает нормально. Для Дата == 0 это дает только выше начало эпохи Excel дата.

Рекомендуется округление до миллисекунд (или, может быть, даже секунд). В противном случае вы получите странные эффекты в результате неточного округления дробных частей дня. Например, 0,33333333 , соответствующий 8 часам , можно вычислить как 07: 59: 59.999712 .

0 голосов
/ 06 января 2020

Ну, у вас здесь две проблемы.

  1. Мы не знаем, какие данные и столбцы у CSV, но для того, чтобы pandas выбрал дату в виде столбца , это должен быть столбец в этом CSV-файле.

  2. Применить не работает на месте. Вы должны были бы присвоить результат применения назад к дате, как data['Date'] = data['Date'].apply(lambda x: datetime.strptime(x, '%d/%m/%Y'))

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