2015-06-09 2 views
0

У меня есть pandas.Series, который представляет собой целое число с 5 цифрами. Первые 3 цифры - дни от эпохи, а последние 2 - половинные часы. Я хочу обрезать целую серию, так что у меня есть два Series с первыми тремя цифрами и двумя последними цифрами соответственно.Как отрезать pandas.Series типа int по длине

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

import pandas as pd  
days_hours = pd.Series(npr.randint(low=1e4, high=99999, size=1000)) 
days = days_hours.astype('str').str.slice(start=0, stop=3).astype('int64') 
hours = days_hours.astype('str').str.slice(start=3, stop=5).astype('int64') 

Это очень отнимает много времени, учитывая, что в среднем моего Series является 25e6 строками каждый (есть 6 таких Series s). Есть ли способ избежать преобразования типов?

Я попробовал альтернативное решение, которое включало в себя функцию lambda для каждого элемента Series, но это заняло больше времени.

ответ

3

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

days = days_hours // 100 

hours = days_hours % 100 
+0

Этот ответ смотрел мне в лицо - спасибо. Значительные ускорения. – tchakravarty

+0

Значительно более простой код, который также важен – holdenweb

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