Python pandas - объединить столбцы даты и времени в столбец datetime с часовым поясом - PullRequest
0 голосов
/ 25 мая 2020

У меня есть набор данных, в котором есть столбец даты и столбец времени, я пытаюсь объединить их в столбец DateTime, но у меня возникла проблема, когда части месяца и даты меняются местами

Например:

Date       Time
1/2/2019   3:29:59 PM
4/2/2019   9:15:59 AM

Эти даты - 1 февраля и 4 февраля 2019 года.

Когда я помещаю их в свой DataFrame и форматирую:

data = pd.read_csv('{}/{}.csv'.format(data_path,symbol), parse_dates=[['Date','Time']])
data.columns = map(str.lower, data.columns)
data['timedelta'] = pd.Series([pd.Timedelta(seconds=59) for i in range(len(data['date_time']))])
data['date_time'] = data['date_time'] - data['timedelta']
data = data.set_index('date_time').tz_localize('Asia/Kolkata')

Я получаю следующий результат:

Datetime
2019-01-02 15:29:00+0530
2019-04-02 09:15:00+0530

Как видите, объект DateTime предназначен для 2 января и 2 апреля 2019 года.

Я был бы признателен за вашу помощь, чтобы выяснить, как получить столбец DateTime отформатирован правильно.

Ответы [ 3 ]

3 голосов
/ 25 мая 2020

Сначала запустите этот df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y'), чтобы изменить формат даты. Затем вы можете объединить дату и время. Полный код ниже:

data = pd.read_csv('{}/{}.csv'.format(data_path,symbol), parse_dates=[['Date','Time']])
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
data.columns = map(str.lower, data.columns)
data['timedelta'] = pd.Series([pd.Timedelta(seconds=59) for i in range(len(data['date_time']))])
data['date_time'] = data['date_time'] - data['timedelta']
data = data.set_index('date_time').tz_localize('Asia/Kolkata')
2 голосов
/ 25 мая 2020

При вызове read_csv установите dayfirst=True, чтобы дата анализировалась правильно. От этажа до минут с использованием dt.floor:

data = pd.read_csv(f'{data_path}/{symbol}.csv', parse_dates=[['Date','Time']], dayfirst=True)

data = data.set_index(data['Date_Time'].dt.floor('min')).tz_localize('Asia/Kolkata')

# need to drop col used as index separately here:
data = data.drop(['Date_Time'], axis=1)
1 голос
/ 25 мая 2020

добавьте в свой код после чтения csv следующее:

df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

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