2016-06-02 2 views
0

У меня есть много столбцов в кадре данных, и мне нужно найти разницу во времени в двух столбцах с именем in_time и out_time и поместить их в новый столбец в том же фрейме данных.Разница между двумя датами в Pandas DataFrame

Формат времени подобен 2015-09-25T01:45:34.372Z.

Я использую Pandas DataFrame.

Я хочу сделать так:

df.days = df.out_time - df.in_time 


У меня есть много столбцов, и я должен увеличить больше 1 столбец в нем имени дней и поставить различия есть.

+0

Возможный дубликат [Вычисление разницы между временными интервалами между двумя столбцами в часах и минутах] (http://stackoverflow.com/questions/22923775/calculate-pandas-dataframe-time-difference-between-two-columns-in -hours-и-minu) – Filly

+0

Моя проблема отличается от вашей, у меня много столбцов, и мне нужно увеличить еще одну колонку в названии дней и поместить там различия. –

ответ

0

Вам нужно преобразовать строки в datetime DTYPE, вы можете вычесть любой произвольной даты вы хотите и в результате серии вызова dt.days:

In [15]: 
df = pd.DataFrame({'date':['2015-09-25T01:45:34.372Z']}) 
df 

Out[15]: 
         date 
0 2015-09-25T01:45:34.372Z 

In [19]: 
df['date'] = pd.to_datetime(df['date']) 
df['day'] = (df['date'] - dt.datetime.now()).dt.days 
df 

Out[19]: 
        date day 
0 2015-09-25 01:45:34.372 -252 
0

Ну, все это своего рода зависит от формата времени вы используете , Я бы рекомендовал использовать datetime.

Если in_time и out_time в настоящее время строки, конвертировать их с datetime.strptime():

from datetime import datetime 

f = lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.%fZ') 
df.in_time = df.in_time.apply(f) 
df.out_time = df.out_time.apply(f) 

, а затем вы можете просто вычесть их, и присвоить результат в новый столбец с именем «дней»:

df['days'] = df.out_time - df.in_time 

Пример: (разницы в 3 секунды и 1 день)

In[5]: df = pd.DataFrame({'in_time':['2015-09-25T01:45:34.372Z','2015-09-25T01:45:34.372Z'], 
          'out_time':['2015-09-25T01:45:37.372Z','2015-09-26T01:45:34.372Z']}) 
In[6]: df 
Out[6]: 
        in_time     out_time 
0 2015-09-25T01:45:34.372Z 2015-09-25T01:45:37.372Z 
1 2015-09-25T01:45:34.372Z 2015-09-26T01:45:34.372Z 

In[7]: type(df.loc[0,'in_time']) 
Out[7]: str 

In[8]: df.in_time = df.in_time.apply(lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.%fZ')) 
In[9]: df.out_time = df.out_time.apply(lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.%fZ')) 

In[10]: df # notice that it looks exactly the same, but the type is different 
Out[10]: 
        in_time     out_time 
0 2015-09-25 01:45:34.372 2015-09-25T01:45:37.372Z 
1 2015-09-25 01:45:34.372 2015-09-26T01:45:34.372Z 

In[11]: type(df.loc[0,'in_time']) 
Out[11]: pandas.tslib.Timestamp 

И создание нового столбца:

In[12]: df['days'] = df.out_time - df.in_time 
In[13]: df 
Out[13]: 
        in_time    out_time   days 
0 2015-09-25 01:45:34.372 2015-09-25 01:45:37.372 0 days 00:00:03 
1 2015-09-25 01:45:34.372 2015-09-26 01:45:34.372 1 days 00:00:00 

Теперь вы можете играть с форматом вывода. Например, часть разницы секунд:

In[14]: df.days = df.days.apply(lambda x: x.total_seconds()/60) 
In[15]: df 
Out[15]: 
        in_time    out_time  days 
0 2015-09-25 01:45:34.372 2015-09-25 01:45:37.372  0.05 
1 2015-09-25 01:45:34.372 2015-09-26 01:45:34.372 1440.00 

Примечание: Что касается формата in_time и out_time, заметьте, что я сделал некоторые предположения (например, что вы используете 24H часы (таким образом, используя %H и не %I)). Чтобы играть в формате, смотрите: strptime() documentation.

Примечание2: Очевидно, было бы лучше, если вы можете создать свою программу, чтобы использовать datetime с самого начала (вместо использования строк и их преобразования).

+0

при использовании "f = lambda x: datetime.strptime (x, '% Y-% m-% dT% H:% M:% S.% fZ') df.in_time = df.in_time.apply (f) Объект «предоставление ошибки» «module» не имеет атрибута «strptime» », как я могу решить эту проблему? –

+0

« strptime »находится в datetime.datetime, а не только в datetime, см .: http://stackoverflow.com/questions/19480028/AttributeError-модуль объектно-не имеет-не-атрибут-strptime-класса – danielhadar

 Смежные вопросы

  • Нет связанных вопросов^_^