2017-10-24 10 views
1
import pandas as pd 
import numpy as np 
titanic= pd.read_csv("C:\\Users\\Shailesh.Rana\\Downloads\\train.csv") 
title=[] #to extract titles out of names 
for i in range(len(titanic)): 
title.append(titanic.loc[:,"Name"].iloc[i].split(" ")[1]) #index 1 is title 
titanic.iloc[(np.array(title)=="Master.")&(np.array(titanic.Age.isnull()))].loc[:,"Age"]=3.5 
#values with master title and NAN as age 

最後の行は、元のデータセットに変更を加えません。実際に、この行を再び実行すると、4つのNaN値を持つシリーズが表示されます。データフレームが更新されないPandas

答えて

0

str.splitstr[1]と選択してください。listを選択してください。

また、numpy arrayに変換する必要はありません。ilocも削除する必要があります。

titanic = pd.DataFrame({'Name':['John Master.','Joe','Mary Master.'], 
         'Age':[10,20,np.nan]}) 

titanic.loc[(titanic.Name.str.split().str[1]=="Master.") &(titanic.Age.isnull()) ,"Age"]=3.5 

print (titanic) 
    Age   Name 
0 10.0 John Master. 
1 20.0   Joe 
2 3.5 Mary Master. 
+0

ありがとう!しかし、なぜ私のコードは動作しませんでしたか?それはエラーを示さなかった。 – shailesh

+0

私はそれをテストして、問題は 'loc' - 'iloc'フィルタを使って' iloc'を使っていますが、そうではありません。だから私の答えを好むだけの 'loc'とソリューションが必要です。私の答えが役に立ったら、[accept](http://meta.stackexchange.com/a/5235/295067)を忘れないでください。答えの横にあるチェックマーク( '✓')をクリックしてグレー表示にします記入してください。ありがとう。 – jezrael

+0

ありがとうございます。これは非常に役に立ちました。あなたは本当にあなたのPythonを知っています。 – shailesh

関連する問題