Pandas - конвертирует float в объект даты и времени - PullRequest
0 голосов
/ 22 января 2019

У меня есть набор данных наблюдений, которые содержат информацию о погоде.Каждый столбец содержит определенное поле, в котором дата и время находятся в двух отдельных столбцах.Столбец времени содержит часовое время, например, от 0000, 0600 до 2300. Я пытаюсь отфильтровать набор данных на основе определенного периода времени, например, между 0000 UTC и 0600 UTC.Когда я пытаюсь прочитать файл данных во фрейме данных pandas, по умолчанию столбец времени читается в формате float.Когда я пытаюсь преобразовать его в объект времени данных, он создает формат, который я не могу преобразовать.Пример кода приведен ниже:

import pandas as pd
import datetime as dt 
df = pd.read_excel("test.xlsx") 
df.head()

, который дает следующий результат:

       tdate   itime moonph  speed   ...          qnh  windir maxtemp mintemp
0  01-Jan-17  1000.0    NM7      5   ...    $1,011.60    60.0  $32.60  $22.80
1  01-Jan-17  1000.0    NM7      2   ...    $1,015.40   999.0  $32.60  $22.80
2  01-Jan-17  1030.0    NM7      4   ...    $1,015.10    60.0  $32.60  $22.80
3  01-Jan-17  1100.0    NM7      3   ...    $1,014.80   999.0  $32.60  $22.80
4  01-Jan-17  1130.0    NM7      5   ...    $1,014.60   270.0  $32.60  $22.80

Затем я извлек столбец времени со следующей строкой:

df["time"] = df.itime

df["time"]

0       1000.0
1       1000.0
2       1030.0
3       1100.0
4       1130.0
5       1200.0
6       1230.0
7       1300.0
8       1330.0
.
.
3261    2130.0
3262    2130.0
3263     600.0
3264     630.0
3265     730.0
3266     800.0
3267     830.0
3268    1900.0
3269    1930.0
3270    2000.0

Name: time, Length: 3279, dtype: float64

ЗатемЯ попытался преобразовать столбец времени в объект datetime:

df["time"] = pd.to_datetime(df.itime)

, который дал следующий результат:

df["time"]

0      1970-01-01 00:00:00.000001000
1      1970-01-01 00:00:00.000001000
2      1970-01-01 00:00:00.000001030
3      1970-01-01 00:00:00.000001100

Похоже, он успешно преобразовал данные в объект datetime.Тем не менее, это добавило время часа к мс, что мне трудно сделать фильтрацию.

Последний формат данных, который я хотел бы получить:

1970-01-01 06:00:00

или

06:00

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Попробуйте

df["time"] = pd.to_datetime(df.itime).dt.strftime('%Y-%m-%d %H:%M:%S')


df["time"] = pd.to_datetime(df.itime).dt.strftime('%H:%M:%S')

Для первого и второго выходов вы хотите

Best!

0 голосов
/ 22 января 2019

Когда вы читаете файл Excel, укажите dtype от col itime как str:

df = pd.read_excel("test.xlsx", dtype={'itime':str})

тогда у вас будет временной столбец строк, похожий на:

df = pd.DataFrame({'itime':['2300', '0100', '0500', '1000']})

Затем укажите формат и конвертируйте во время:

df['Time'] = pd.to_datetime(df['itime'], format='%H%M').dt.time

    itime   Time
0   2300    23:00:00
1   0100    01:00:00
2   0500    05:00:00
3   1000    10:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...