Панды преобразуют строковый столбец даты и времени в дату и время без применения смещения - PullRequest
0 голосов
/ 17 мая 2018

Я новичок в Python и Pandas, так что не стесняйтесь со мной:)

У меня есть несколько столбцов в форме "2014-01-01 00:00:00-06:00". Теперь я хочу преобразовать имя столбца в дату-время панды. Но я борюсь с форматом, который мне нужен. Я уже пробовал

date = pd.to_datetime("2014-01-01 00:00:00-06:00", format='%Y-%m-%d %H:%M:%S%z')

Но здесь я получаю ошибку с "ValueError: time data '2014-01-01 00:00:00-06:00' does not match format '%Y-%m-%d %H:%M:%S%Z' (match)"

Я не хочу, чтобы время конвертировалось в мой часовой пояс. Мне нужно это для часового пояса -06: 00

Для этого ввода:

2014-01-01 00: 00: 00-06: 00

Выходные данные должны быть:

2014-01-01 00: 00: 00

Я хочу использовать переменную даты выходных данных, чтобы я мог разбить свои данные на сезоны. Примерно так:

date > springBegining

Спасибо за помощь

1 Ответ

0 голосов
/ 17 мая 2018

Вам не нужна строка формата, pandas достаточно мужчина / женщина, чтобы справиться с этим:

In[2]:
pd.to_datetime('2014-01-01 00:00:00-06:00')

Out[2]: Timestamp('2014-01-01 06:00:00')

кроме того, у вашей строки формата есть многочисленные проблемы:

%bявляется месяцем как сокращенная форма локали, у вас есть числовое представление, поэтому оно должно быть %m

%z требует смещения UTC в форме '+HHMM'/-HHMM

Так что вам нужнопереформатируйте строку даты и времени в:

'2014-01-01 00:00:00-0600'

Если вы не хотите, чтобы смещение применялось, а смещение всегда было одинаковым, вы можете удалить его из строки:

In[25]:
pd.to_datetime('2014-01-01 00:00:00-06:00'.rsplit('-',1)[0])

Out[25]: Timestamp('2014-01-01 00:00:00')

Или вы можете нарезать строку:

In[26]:
pd.to_datetime('2014-01-01 00:00:00-06:00'[:-6])

Out[26]: Timestamp('2014-01-01 00:00:00')

Таким образом, чтобы сделать вышеупомянутое для всего столбца:

pd.to_datetime(df[col].str[:-6])

Пример:

In[27]:
df = pd.DataFrame({'date':['2014-01-01 00:00:00-06:00','2014-01-01 00:00:00+06:00']})
df

Out[27]: 
                        date
0  2014-01-01 00:00:00-06:00
1  2014-01-01 00:00:00+06:00

In[28]:
pd.to_datetime(df['date'].str[:-6])

Out[28]: 
0   2014-01-01
1   2014-01-01
Name: date, dtype: datetime64[ns]

Здесь мы используем метод доступа к строке .str, чтобы разрезать все столбцы одинаковым образом, и передаем его в to_datetime для преобразования всего столбца

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