2016-05-03 22 views
1

データフレーム内の列をループし、辞書に値が含まれている場合、ループされた列の部分文字列を使用して新しい列を作成しようとしています。より具体的には、アドレス列内の個々の行に、状態名および略語の辞書が含まれている場合は、状態の省略形を新しい列になるリストに追加します。辞書に一致する部分文字列を抽出するためにdataframeをループする

以下のコードは、完全な一致を動作しますが、部分文字列の行をスキャンしていません。

import pandas as pd 

df = pd.DataFrame((['Austin, Texas', 
       'Texas', 
       'Seattle, Washington', 
       ',,, Texas', 
       'Olympia, WA']), columns = ['Place']) 

states = {'Texas': 'TX', 
     'Washington': 'WA'} 

place = df['Place'] 

results = [] 

for x in place: 
    if x in states: 
     results.append(x) 
    else: 
     results.append(None) 

df['State'] = results 
df 

感謝を!

答えて

0

入れ子の条件付きリストの理解は、そのトリックを行います。空白を削除するには、カンマで区切り、ストリップを使用する必要があります。

またニューヨーク(ニューヨーク州)は問題を引き起こす可能性があるため、結果をリストに残しました。

df['results'] = [[state.strip() for state in cell.split(',') 
        if state.strip() in states] 
       for cell in df.Place] 

df['results2'] = df.results.apply(lambda s: s[-1] if s else '') 

>>> df 
       Place  results results2 
0  Austin, Texas  [Texas]  Texas 
1    Texas  [Texas]  Texas 
2 Seattle, Washington [Washington] Washington 
3   ,,, Texas  [Texas]  Texas 
4   Olympia, WA   []    
+0

それはトリックです、ありがとうございます! – MuirSalt

+0

私は尋ねることを忘れました、あなたはこれで非リストをどのように返すでしょうか?私は自分のデータにニューヨーク、ニューヨークを持っているとは思わないので、私にとっては問題ではありません。 – MuirSalt

+0

害虫であることは申し訳ありませんが、「名前」セルが「定義されていません」というエラーが表示されていますか?すばやくGoogle検索で何かプルアップしていないようですか? – MuirSalt

関連する問題