2017-05-16 3 views
1

한 데이터 프레임 열의 날짜를 다른 값의 정수 값만큼 증가시키고 싶습니다.다른 데이터 프레임 값을 사용하여 pandas 데이터 프레임에 날짜 추가하기

나는 형식 오류가 나타날 수 timedelta 일 구성 요소에 대한 지원되지 않는 유형 : numpy.int64을

내 dataframes는 다음과 같이 :

import pandas as pd 
import numpy as np 
import datetime as dt 

dfa = pd.DataFrame([ 
    ['5/15/17',1], 
    ['5/15/17',1]], 
    columns = ['Start','Days']) 

dfb = pd.DataFrame([ 
    ['5/15/17',1], 
    ['5/15/17',1]], 
    columns = ['Start','Days']) 

가이 코드와 날짜에 '시작'열을 포맷 :

dfa['Start'] = dfa['Start'].apply(lambda x: 
            dt.datetime.strptime(x,'%m/%d/%y')) 
dfb['Start'] = dfb['Start'].apply(lambda x: 
            dt.datetime.strptime(x,'%m/%d/%y')) 

dfa 데이터 프레임의 값을 변경하려고합니다. 을위한 '일'이 아닌 '시작'에 대한 DFB dataframe의 참고 문헌 :

for i, row in dfb.iterrows(): 
    for j, row in dfa.iterrows(): 
     new = pd.DataFrame({"Start": dfa.loc[j,"Start"] + datetime.timedelta(days=dfb.loc[i,"Days"]), "Days": dfa.loc[j,"Days"] - dfb.loc[i,"Days"]}, index = [j+1]) 
     dfa = pd.concat([dfa.ix[:j], new, dfa.ix[j+1:]]).reset_index(drop=True) 

이 오류 제기의 핵심 구성 요소입니다

"시작"dfa.loc [J, "시작" ] + datetime.timedelta (일 = dfb.loc [나는 "일"]

그것은 내가 사용하는 경우 잘 작동 :

"시작"dfa.loc [J, "시작"] + 날짜. timedelta (일 = 1)

하지만 그걸 받아 들여야합니다. dfb에서 t 값, 정적 정수가 아닙니다.

답변

1

IIUC (나는 입력이 조금 무슨 일이 일어나고 있는지 명확하게 값 변경) :

import pandas as pd 

dfa = pd.DataFrame([ 
    ['5/15/17',1], 
    ['5/16/17',1]], 
    columns = ['Start','Days']) 

dfb = pd.DataFrame([ 
    ['5/15/17',3], 
    ['5/16/17',4]], 
    columns = ['Start','Days']) 

dfa['Start'] = pd.to_datetime(dfa['Start']) 

dfb['Start'] = pd.to_datetime(dfb['Start']) 

dfa['Start'] = dfa['Start'] + dfb['Days'].apply(pd.Timedelta,unit='D') 
print(dfa) 

출력 :

작동해야하고 그것은 당신의 코드를하는 것처럼 보인다
 Start Days 
0 2017-05-18  1 
1 2017-05-20  1 
+0

하지만, 실제 코드에서 dfb.loc [i, 'Days']로 적용하면 (pd.Timedelta, unit = 'D') 적용됩니다. AttributeError : 'numpy.int64' . – swysell

+0

아,하지만 ".loc [i,"를 제거하면 작동합니다. 나는 내가 어느 색인에 대한 참조를 유지할 필요가 있다고 가정하고 있었지만 어쩌면 그렇지 않은 것일까? – swysell

+0

팬더에 대한 멋진 점 중 하나는 인덱스 정렬을 통해 본질적으로 일을한다는 점입니다. dfa와 dfb가 비슷하게 보이면 인덱스에 정렬됩니다. 또한 dfa와 dfb가 서로 다른 정렬 순서에 있다면 정렬 정렬을 얻기 위해 set_index ('Date')를 둘 다 사용할 수 있습니다. –

관련 문제