2016-04-13 26 views
0

私は人の名前を並べ替えるスクリプトに取り組んでいます。私はcsvモジュールを使ってこれを使っていましたが、これはもっと大きなパンダプロジェクトに結びつくので、私はそれを変換すると思っていました。if ... python/pandasのelif文

1つの名前フィールドを最初、中間、最後のフィールドに分割する必要があります。元のフィールドには最初の名前があります。例:Richard Wayne Van Dyke。

私は名前を分割しましたが、 "Van Dyke"を姓にします。ここで

作品csvモジュールのための私のコードです:ここでは

with open('inputfil.csv') as inf: 
    docs = csv.reader(inf) 
    next(ccaddocs, None) 
    for i in docs: 
     #print i 
     fullname = i[1]#it's the second column in the input file 
     namelist =fullname.split(' ') 
     firstname = namelist[0] 
     middlename = namelist[1] 
     if len(namelist) == 2: 
      lastname = namelist[1] 
      middlename = '' 
     elif len(namelist) == 3: 
      lastname = namelist[2] 
     elif len(namelist) == 4: 
      lastname = namelist[2] + " " + namelist[3] #gets Van Dyke in lastname 
     print "First: " + firstname + " middle: " + middlename + " last: " + lastname 

は、私は苦労してる私のパンダベースのコードです:

df = pd.DataFrame({'Name':['Richard Wayne Van Dyke','Gary Del Barco','Dave Allen Smith']}) 
df = df.fillna('') 
df =df.astype(unicode) 
splits = df['Name'].str.split(' ', expand=True) 

df['firstName'] = splits[0] 
if splits[2].notnull and splits[3].isnull:#this works for Bret Allen Cardwell 

    df['lastName'] = splits[2] 
    df['middleName'] = splits[1] 
    print "Case 1: First: " + df['firstName'] + " middle: " +df['middleName'] + " last: " + df['lastName'] 
elif splits[2].all() == 'Del':#trying to get last name of "Del Barco" 
    print 'del' 
    df['middleName'] = '' 
    df['lastName'] = splits[2] + " " + splits[3] 
    print "Case 2: First: " + df['firstName'] + " middle: " +df['middleName'] + " last: " + df['lastName'] 

elif splits[3].notnull: #trying to get last name of "Van Dyke" 
    df['middleName'] = splits[1] 
    df['lastName'] = splits[2] + " " + splits[3] 
    print "Case 3: First: " + df['firstName'] + " middle: " +df['middleName'] + " last: " + df['lastName'] 

私は「という基本的な何かがあります私は行方不明です。

+0

私はパンダを理解していませんが、パンダにデータを渡す前に作業を行う私のCSVコードを改訂しました。上記のcsvコードのように 'csv.reader'を使用する代わりに、' csv.DictReader'に変更しました。データを辞書に渡すことで、Nameフィールドのキー値ペアを使用してcsvコードを機能させることが容易になりました。 – mattrweaver

答えて

0
if len(name) >= 3: # (assume that user only has one middle name) 

    firstname = splits[0] 
    middlename = splits[1] 
    lastnames = splits[2:] (catch all last names into a list) 
+0

お返事ありがとうございます。私はあなたのロジックを見ていますが、 "lastnames"を印刷すると次のようになります。>>> 2 Dave Allen Smithなし >>>私は何が起こっているのかわかりません。私は姓のリストを見ることを期待していた。私は '分割[2] +分割にlastnamesを変更した場合、[3]'私が取得:>>> 0バンダイク 1 NaNの 2のNaN DTYPE:オブジェクト >>> – mattrweaver

+0

はあなただけで何を見て分割を印刷しようとしています実際にそこにいるのですか? – beoliver

+0

はい: 0リチャード 1ゲイリー 2デイブ 名:0、DTYPE:オブジェクト 0ウェイン 1デル 2アレン 名:1、DTYPE:オブジェクト 0ヴァン 1バルコ 2スミス 名:2 、dtype:object 0ダイク 1なし 2なし 名前:3、dtype:object – mattrweaver

関連する問題