2014-11-19 6 views
0

У меня есть текстовый файл с данными с столбцами типа '10: 15.3 ', что означает 10 минут 15.3 секунд после некоторого канонического события. Когда я прочитал это с read_csv, я получаю строки:Pandas read_csv строки отсчета времени чтения

>>> df.time.head() 
0 08:32.0 
1 08:38.0 
2 08:39.0 
3 08:43.0 
4 09:15.0 
Name: time, dtype: object 
>>> df.time.head()[:1][0] 
'08:32.0' 
>>> 

Я чувствую, что я должен быть в состоянии получить секунд достаточно легко в панд, либо путем указания преобразования в read_csv или (вероятно, лучше, так что у меня есть оба), добавив новый столбец, но я не вижу, как это сделать. Я почти уверен, что это просто я плотный.

Может ли кто-нибудь предложить чаевые, чтобы помочь мне расклеиться?

ответ

1

Вы можете использовать объект datetime.time. Для этого вы предоставляете: часы, минуты, секунды, микросекунды. Они представлены в виде целых чисел, поэтому вам просто нужно включить соответствующую часть каждой строки в конструктор datetime.date.

Так что в вашем случае:

import datetime 
df = pd.read_csv('your_csv.csv') 
df.time = pd.Series([datetime.time(0, int(val[:2]), int(val[3:5]), int(val[6:])*100000) 
        for val in df.time], index = df.index) 
+0

не должны '' datetime.date' быть datetime.time'? – joris

+0

спасибо, что он должен –

0

Я не могу помочь вам с пандами внутренностями, но есть простой вещий способ получить секунды в цифровом формате:

timeStr = '08:32.0' 
seconds = float(time.split(':')[1]) # Split splits the string at the ':' character making a list of strings. Taking the second item from the list and casting to float should get you what you want. 
0

Не работал с пандами, но я бы извлечь секунды как это:

from time import strptime 
print strptime('09:12.14','%I:%M.%S').tm_sec 
1

Используя 0.15, это довольно легко сделать, полные документы являются here

Ваш формат не является «правильным» формат, но может легко сделать его одним , предварительно ожидая «00:», чтобы сделать поле часов.

In [20]: pd.Timedelta('00:' + '10:15.3') 
Out[20]: Timedelta('0 days 00:10:15.300000') 

In [19]: s 
Out[19]: 
0 08:32.0 
1 08:38.0 
2 08:39.0 
3 08:43.0 
4 09:15.0 
Name: 1, dtype: object 

Разберите его на timedelta.

In [15]: res = pd.to_timedelta('00:' + s) 

In [16]: res 
Out[16]: 
0 00:08:32 
1 00:08:38 
2 00:08:39 
3 00:08:43 
4 00:09:15 
Name: 1, dtype: timedelta64[ns] 

Эти отображаемые секунд от канонического восстановленного формата (например, чч: мм: сс в низшей форме).

In [17]: res.dt.seconds 
Out[17]: 
0 32 
1 38 
2 39 
3 43 
4 15 
dtype: int64 

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

In [18]: res.astype('timedelta64[s]') 
Out[18]: 
0 512 
1 518 
2 519 
3 523 
4 555 
Name: 1, dtype: float64 
Смежные вопросы