Панды - время чтения с read_csv - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно прочитать CSV-файл, в котором столбец хранит время дня в формате ЧЧ: ММ: СС.Мне нужно сравнить это время, поэтому моя идея - использовать дату и время.Информация о дате не актуальна и не присутствует в файле.

Если я прочитаю файл и проанализирую дату следующим образом:

import pandas as pd    
dateparse = lambda x: pd.datetime.strptime(x, '%H:%M:%S')
my_data = pd.read_csv(file_name, parse_dates=['Time'], date_parser=dateparse)
print(my_data.loc[0]['Time'])

Я получу 1900-01-01 11:03:41.Как мне избавиться от даты и года?Мне это не нужно и не понадобится в моем выходном файле.
Есть ли способ прочитать этот столбец в формате datetime.time?

Я также пробовал:

my_data = pd.read_csv(file_name, parse_dates=['Time'], 
                     date_parser=lambda x: pd.to_datetime(x, format='%H:%M:%S'))

с тем же результатом.

1 Ответ

0 голосов
/ 05 июня 2018

Если вы просто хотите изменить вывод в CSV, вы можете указать date_format в to_csv:

In[130]:    
df = pd.DataFrame({'date':[pd.datetime.strptime('11:03:41', '%H:%M:%S')]})
df.to_csv(date_format='%H:%M:%S')

Out[130]: ',date\n0,11:03:41\n'

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

. Вы всегда можете просто добавить дополнительный столбец в виде datetime.time или str представления:

In[131]:
df['time'] = df['date'].dt.time
df['str_rep'] = df['date'].dt.strftime('%H:%M:%S')
df

Out[131]: 
                 date      time   str_rep
0 1900-01-01 11:03:41  11:03:41  11:03:41

Чтобы продемонстрировать мою точку зрения:

In[136]:

df = pd.DataFrame({'date':pd.to_datetime(['11:03:41', '15:23:33'], format='%H:%M:%S').time})
df
Out[136]: 
       date
0  11:03:41
1  15:23:33

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

df['date'].diff()

это повысит:

TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

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

In[138]:
df = pd.DataFrame({'date':pd.to_datetime(['11:03:41', '15:23:33'], format='%H:%M:%S')})
df

Out[138]: 
                 date
0 1900-01-01 11:03:41
1 1900-01-01 15:23:33

In[139]:
df.diff()

Out[139]: 
      date
0      NaT
1 04:19:52

обновление

Если вы действительно хотите datetime.time, вы можете изменить lambda:

dateparse = lambda x: pd.datetime.strptime(x, '%H:%M:%S').time()
my_data = pd.read_csv(file_name, parse_dates=['Time'], date_parser=dateparse)

, или это также будет работать:

my_data = pd.read_csv(file_name, parse_dates=['Time'], 
                     date_parser=lambda x: pd.to_datetime(x, format='%H:%M:%S').time())

сравнения и некоторые арифметические операции будут работать, но это не так гибко, как собственный datetime64 dtype.

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