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値であり、静的な整数ではありません。
それが動作するはずですし、それはあなたのコードでないように思えるが、実際のコードにdfb.loc [i、 'Days']として配置すると、apply(pd.Timedelta、unit = 'D')、それが発生します:AttributeError: 'numpy.int64' 。 – swysell
ああ、私が ".loc [i、"を削除しても動作します。私は、私がどのインデックスを参照していたかを参照する必要があると仮定していましたが、そうでないかもしれません。 – swysell
パンダのクールなことの1つは、本質的にインデックスアラインメントを使っていることです。 dfaとdfbが同じように見える場合は、インデックスに整列します。また、dfaとdfbが異なるソート順であれば、両方でset_index( 'Date')を使用して整列を修正することもできます。 –