Найти час в кадре H2O - PullRequest
       24

Найти час в кадре H2O

1 голос
/ 04 ноября 2019

Я пытаюсь найти час в столбце, который имеет формат «hhmmss», то есть «90205», где 9 обозначает час. Некоторые строки могут не содержать секунд, поэтому это может быть «902», и мне все равно нужно получить «9». Пример столбца следующий:

REQ_TIME 195426 508 140315 141432 203344 214103 63202 101807 110730 115052

Я могу сделать это в обычном кадре данных следующим образом:

df["DATE"]=pd.to_datetime(df.REQ_DATE, format='%Y%m%d')
df["TIME"]=df["REQ_TIME"].apply(lambda x: str(x).zfill(6))
df['DATE_TIME']=df[['REQ_DATE','TIME']].apply(lambda x : '{} {}'.format(x[0],x[1]), axis=1)
df['DATE_TIME']=pd.to_datetime(df.DATE_TIME,infer_datetime_format=True)
df["HOUR"]=df.DATE_TIME.dt.hour
df['YEAR'] = df.DATE.dt.year
df['MONTH'] = df.DATE.dt.month
df['DAY'] = df.DATE.dt.day
df['DAY_OF_WEEK']=df.DATE.dt.dayofweek

Но мои данные находятся вH2OFrame, поэтому я не могу использовать обычные методы Python. Я не хочу преобразовывать это в dataframe также, так как это занимает много времени. Как я могу сделать это в H2OFrame?

1 Ответ

0 голосов
/ 06 ноября 2019

Если ваше поле REQ_TIME было всегда 6 цифр, то есть всегда было заполнено нулями влево и вправо, это становится намного проще. Например, вы можете использовать gsub, чтобы просто взять первые два символа.

Или, если он всегда был дополнен нулями справа (т. Е. Добавлено «00» секунд при отсутствии), и он был импортирован как числовое полеВы можете разделить на 10000 и использовать floor.

(см. http://h2o -release.s3.amazonaws.com / h2o / rel-turchin / 5 / docs-website / h2o-py / docs / frame.html для операций, доступных на H2OFrames, из Python API.)

Но в вашем случае я бы скачал этот столбец, выполнил сложные манипуляции в python, а затем импортировал new H2O Кадр, содержащий только этот столбец. Дайте ему имя столбца "hours". Затем используйте cbind, чтобы присоединить новый столбец к существующему фрейму h2o.

(Другой способ решения этой проблемы состоит в том, что первая строка вашего вопроса является неточной, поскольку это не такФормат "hhmmss", но на самом деле представляет собой сочетание "hmm", "hhmm", "hmmss" и "hhmmss", все вместе в одном столбце. Как только вы это описали, вы видите, что у вас есть проблема с данными. ЛичноЯ хотел бы попытаться исправить это в момент сбора данных. Затем, если вы когда-нибудь увидите метку времени, которая не совсем 6 цифр, вы сразу узнаете, что у вас неверные данные.)

...