2017-05-16 16 views
1

あるデータフレーム列の日付を別のデータフレーム列の整数値で増やしたいとします。他のデータフレーム値を含むpandasデータフレームの日付への追加

私はTypeError例外受け取る:

マイデータフレームは次のようになりnumpy.int64:

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']) 

私はこのコードで日時に 'スタート' 列の書式を設定:はtimedelta日コンポーネントのサポートされていないタイプを

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データフレームの値を変更しようとしています。

「スタート」:dfa.loc [J、「スタート」

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) 

これは、エラーを発生させる重要な要素である:「日」ではなく「スタート」のためのためのDFBデータフレームの参考資料] + datetime.timedelta(日= dfb.loc [I、 "日"]

それは私が使用している場合は正常に動作します:

"スタート":dfa.loc [J、 "スタート"] +日時。 timedelta(days = 1)

しかし、私はそれを取る必要がありますdfbからのt値であり、静的な整数ではありません。

答えて

1

IIUC(Iが入力に何が起こっているかを明確にするビット値に変更):

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']として配置すると、apply(pd.Timedelta、unit = 'D')、それが発生します:AttributeError: 'numpy.int64' 。 – swysell

+0

ああ、私が ".loc [i、"を削除しても動作します。私は、私がどのインデックスを参照していたかを参照する必要があると仮定していましたが、そうでないかもしれません。 – swysell

+0

パンダのクールなことの1つは、本質的にインデックスアラインメントを使っていることです。 dfaとdfbが同じように見える場合は、インデックスに整列します。また、dfaとdfbが異なるソート順であれば、両方でset_index( 'Date')を使用して整列を修正することもできます。 –

関連する問題