2016-05-03 3 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

Смежные вопросы