2016-08-08 2 views
1

두 날짜가 포함 된 pandas 데이터 프레임이 있습니다. 나는 그들 사이의 시차를 가져 가고 싶다. 그러나 결과 차이는 문자열 ex ('7 일')처럼 보입니다. 이것을 정수 날짜 차이만으로 변경하는 방법이 있습니까?pd datetime 객체를 정수로 변경합니다.

y['datePulled'] = pd.to_datetime(y['datePulled']) 
y['Dates'] = pd.to_datetime(y['Dates']) 
y['Datediff'] = y['datePulled'] - y['Dates'] 
y['Datediff'] 
0 7 days 
1 6 days 
2 5 days 
3 4 days 
4 3 days 
5 2 days 
6 1 days 

답변

2

당신은 사용할 수 있습니다

(y['Datediff']/np.timedelta64(1, 'D')).astype(int) 

또는 :

y['Datediff'].dt.days 

을 샘플 : 큰 DataFrame 첫 번째 방법에서

import pandas as pd 
import numpy as np 

y = pd.DataFrame({ 'datePulled': ['2016-01-05','2016-01-04'], 
        'Dates': ['2016-01-01','2016-01-02']}) 

y['datePulled'] = pd.to_datetime(y['datePulled']) 
y['Dates'] = pd.to_datetime(y['Dates']) 
y['Datediff'] = y['datePulled'] - y['Dates'] 
print (y) 

#output is float, cast to int 
y['Datediff1'] = (y['Datediff']/np.timedelta64(1, 'D')).astype(int) 

y['Datediff2'] = y['Datediff'].dt.days 
print (y) 
     Dates datePulled Datediff Datediff1 Datediff2 
0 2016-01-01 2016-01-05 4 days   4   4 
1 2016-01-02 2016-01-04 2 days   2   2 

가 빠르다 :

,
y = pd.concat([y]*1000).reset_index(drop=True) 

In [236]: %timeit (y['Datediff']/np.timedelta64(1, 'D')).astype(int) 
1000 loops, best of 3: 789 µs per loop 

In [237]: %timeit y['Datediff'].dt.days 
100 loops, best of 3: 15.3 ms per loop 
+0

다음과 같은 오류를 가져 오기 : 역 추적 (마지막으로 가장 최근에 호출) : 파일 "", 라인 1, 형식 오류에 잘못된 날짜 시간 단위 "D"를 작동 메타 데이터 – mangodreamz

+0

에! 감사합니다 jezrael – mangodreamz

관련 문제