0
複数の引数を持つ関数を適用してこのデータからパンダシリーズを取得しようとしています。私のコードとデータは、私はパンダシリーズを取得したいと思いますので、私のデータが列「誕生日」にgetage関数を適用した後、この複数の引数を持つカスタム関数をパンダ列に適用すると、UnboundLocalErrorが発生する
Index BirthDate ID Values
0 25031978 001 5
1 None 002 10
3 12122012 003 15
ように見える
from datetime import datetime
import pandas as pd
from dateutil.relativedelta import relativedelta
def getage(x,now,status):
if x != None:
date = pd.to_datetime(x,format='%d%m%Y').date()
age = relativedelta(now, date).years
if status:
age = relativedelta(now, date).years
else:
age = 'Unknown'
return age
today = datetime.now().date()
data = pd.DataFrame({'ID':['001','002','003'],
'BirthDate':['25031978',None,'12122012'],
'Values':[5,10,15]})
customer_age = df['BirthDate'].apply(getage,args=(today,True,))
以下の通りです(customer_age次のように):
Index 0
0 38 # because the date difference (year) between BirthDate and today is 38
1 Unknown
2 4 # because the date difference (year) between BirthDate and today is 4
をただし、次のように、私はエラーを取得する:
UnboundLocalError: local variable 'age' referenced before assignment
この問題を解決するためのご提案がありますか?前もって感謝します。
'x'が' None'の場合、 'age'を返そうとしています。 'x'が' None'のとき 'age'とは何ですか? – user2357112
トレースバックに問題があった行が示されました。トレースバックを投稿した場合は、それも見ることができますが、私たちが推測することを望むので、私は推測します。 'UnboundLocalError'は何かを割り当てる前にローカル変数を使用しようとしたことを意味します。あなたのコードを見ると、 'x'が' None'のときの 'return age'で起こります。私がしたのは、エラーのある行から、 'age'を設定するのを怠ったコードパスを振り返ってみるだけでした。その解決策は、その場合に 'age'にある値を代入する' else'節です。 – tdelaney
ありがとうございます。私はUnderboundlocalErrorについてもっとよく理解しており、今修正することができます。 –