2017-04-20 32 views
3

考慮一下:熊貓:如何使用between_time與毫秒?

import pandas as pd 
import numpy as np 

idx2=[pd.to_datetime('2016-08-31 22:08:12.000'), 
    pd.to_datetime('2016-08-31 22:08:12.200'), 
    pd.to_datetime('2016-08-31 22:08:12.400')] 

test=pd.DataFrame({'value':[1,1,3], 'groups' : ['A',np.NaN,'A']},index=idx2) 
    test 
Out[27]: 
         groups value 
2016-08-31 22:08:12.000  A  1 
2016-08-31 22:08:12.200 NaN  1 
2016-08-31 22:08:12.400  A  3 

我需要22:08:12.20022:08:12.400之間只保留數據,所以我很自然地使用between_time

test.between_time('22:08:12.200','22:08:12.400') 

ValueError: Cannot convert arg ['22:08:12.200'] to a time

這裏有什麼問題?如何根據時間以毫秒信息切片我的dataframe

回答

3

我不確定爲什麼直接字符串不起作用,但它看起來像來自字符串的來自datetime的時間轉換。但是你可以用顯式轉換解決方法,以time爲:

代碼:

test.between_time(*pd.to_datetime(['22:08:12.200', '22:08:12.400']).time) 

測試代碼:

import pandas as pd 
import numpy as np 

idx2 = [ 
    pd.to_datetime('2016-08-31 22:08:12.000'), 
    pd.to_datetime('2016-08-31 22:08:12.200'), 
    pd.to_datetime('2016-08-31 22:08:12.400')] 

test = pd.DataFrame(
    {'value': [1, 1, 3], 'groups': ['A', np.NaN, 'A']}, index=idx2) 

print(test.between_time(
    *pd.to_datetime(['22:08:12.200', '22:08:12.400']).time)) 

結果:

     groups value 
2016-08-31 22:08:12.200 NaN  1 
2016-08-31 22:08:12.400  A  3 
+0

這麼好。謝謝 !!! –

0

你可以使用標準的日期時間:

test.between_time(datetime.time(22,8,12,200000),datetime.time(22,8,12,400000),include_start=True,include_end=True)