2017-03-07 5 views
-1
def age_range(age): 
    if age <= 18: 
     return 'Minors' 
    elif age >= 19 & age < 63: 
     return 'Adults' 
    elif age >= 63 & age < 101: 
     return 'Senior Citizen' 
    else: 
     return 'Age Unknown' 

titanic_data_df["PassengerType"] = titanic_data_df[['Age']].apply(age_range, axis = 1) 

titanic_data_df.head() 

私は、既存のデータフレーム(titanic_data_df)に新しい列を追加しようとすると、私は次のエラーを取得する:私はこれまでのところ、それは持って読んだものから、とValueError適用使用している間()メソッド

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-466-741f5646101e> in <module>() 
     1 #create a new df with just age and distinguish each passenger as minor, adult or senior citizen 
----> 2 titanic_data_df["PassengerType"] =  titanic_data_df[['Age']].apply(age_range, axis = 1) 
     3 
     4 titanic_data_df.head() 

C:\Users\test\Anaconda2\envs\py27DAND\lib\site-packages\pandas\core\frame.pyc in apply(self, func, axis, broadcast, raw, reduce, args, **kwds) 
    4161      if reduce is None: 
    4162       reduce = True 
-> 4163      return self._apply_standard(f, axis, reduce=reduce) 
    4164    else: 
    4165     return self._apply_broadcast(f, axis) 

C:\Users\test\Anaconda2\envs\py27DAND\lib\site-packages\pandas\core\frame.pyc in _apply_standard(self, func, axis, ignore_failures, reduce) 
    4257    try: 
    4258     for i, v in enumerate(series_gen): 
    -> 4259      results[i] = func(v) 
    4260      keys.append(v.name) 
    4261    except Exception as e: 

<ipython-input-465-e62ccbeee80e> in age_range(age) 
     1 def age_range(age): 
----> 2  if age <= 18: 
     3   return 'Minors' 
     4  elif age >= 19 & age < 63: 
     5   return 'Adults' 

C:\Users\test\Anaconda2\envs\py27DAND\lib\site-packages\pandas\core\generic.pyc in __nonzero__(self) 
    915   raise ValueError("The truth value of a {0} is ambiguous. " 
    916       "Use a.empty, a.bool(), a.item(), a.any() or a.all()." 
--> 917       .format(self.__class__.__name__)) 
    918 
    919  __bool__ = __nonzero__ 

ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', u'occurred at index 0') 

上記のメソッドのif ... else文と何か関係があります。私はそれが何であるか把握することはできません。どんな助けもありがとうございます。ありがとうございました。

+1

あなたは、あなたの質問に[MCVE](トレースバックを含む)を追加してもらえますか?エラーを再現できない場合は、何が起きているのか把握するのは難しいです。 – MSeifert

+0

これはパンダの質問ですか?質問タグは不完全なようです。 –

+1

私はPandasについてよく分かりませんが、ビット演算子 '&'は論理演算子 'と'と異なりますので、問題の原因となる可能性があります。実際には、決して気にしないでください。エラーではなく誤った結果が生じるでしょう。 – TigerhawkT3

答えて

1

titanic_data_df[['Age']](二重角括弧に注意してください)という列を選択すると、実際には単一の列を含むDataFrameが取得されます。この場合、apply()関数は、1つの要素Seriesを関数age_rangeに渡しています。

代わりにこれを試してみてください:

titanic_data_df["PassengerType"] = titanic_data_df['Age'].apply(age_range) 
+0

ありがとうございます。それは理にかなっている。 また、シリーズの代わりにDataframeを使い続けたい場合は、appylmap()を使うこともできます。 – pyuser181

0

パンダcut機能はあなたのために、これは非常に簡単になります。まず、cutの機能を実証するためのデータフレームを作成します。

titanic_data_df = pd.DataFrame(data=[[13, 'Male'], [14, 'Female'], [38, 'Female'], [72, 'Male'], [33, 'Female'], [80, 'Male'], [34, 'Male'], [15, 'Female'], [27, 'Female'],[23, 'Male'], [64, 'Female'], [38, 'Female'], [12, 'Male'], [32, 'Female'], [21, 'Male'], [66, 'Male'], [73, 'Female'], [22, 'Female']], columns=['Age', 'Sex']) 
print(titanic_data_df) 
    Age  Sex 
0 13 Male 
1 14 Female 
2 38 Female 
3 72 Male 
4 33 Female 
5 80 Male 
6 34 Male 
7 15 Female 
8 27 Female 
9 23 Male 
10 64 Female 
11 38 Female 
12 12 Male 
13 32 Female 
14 21 Male 
15 66 Male 
16 73 Female 
17 22 Female 

その後、私は単にcut機能を適用します。

bins = ['Minors', 'Adults', 'Senior Citizens'] 
titanic_data_df["PassengerType"] = pd.cut(titanic_data_df.Age, [0, 18, 63, 101], labels=bins) 
print(titanic_data_df) 
    Age  Sex  PassengerType 
0 13 Male   Minors 
1 14 Female   Minors 
2 38 Female   Adults 
3 72 Male Senior Citizen 
4 33 Female   Adults 
5 80 Male Senior Citizen 
6 34 Male   Adults 
7 15 Female   Minors 
8 27 Female   Adults 
9 23 Male   Adults 
10 64 Female Senior Citizen 
11 38 Female   Adults 
12 12 Male   Minors 
13 32 Female   Adults 
14 21 Male   Adults 
15 66 Male Senior Citizen 
16 73 Female Senior Citizen 
17 22 Female   Adults 
+0

参考にしていただきありがとうございます。これは素晴らしい! – pyuser181

関連する問題