Замена сокращенных состояний в серии df на полное состояние с пониманием списка

#python #pandas

Вопрос:

Я чувствую, что это возможно, но я не уверен:

Это мой код прямо сейчас:

 def full_states(upload_list):  abr_states = ["AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY", "RI", "ON", "AB", "BC", "DC", "NB"]  state_names = ["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming", "Rhode Island", "Ontario", "Alberta", "British Columbia", "Washington D.C.", "New Brunswick"]  series = []  for a in range(len(abr_states)):  for s in range(len(state_names)):  upload_series = upload_list["State"].str.replace(abr_states[a],state_names[s])  series.append(upload_series)  print(series)  upload_list["State"] = series  return upload_list  full_states(upload_list)  

Если это не очевидно, у меня есть столбец фрейма данных pandas, в котором есть сокращенные состояния. Я пытаюсь просмотреть список сокращенных состояний и одно из полных состояний и вставить их в str.replace метод серии pandas, чтобы заменить сокращенные состояния в столбце (все они в настоящее время указаны) полными названиями состояний. Я не могу сказать, что я должен делать по-другому, чтобы получить желаемый результат, и я застрял. Любое направление приветствуется!

Комментарии:

1. Вам следует воспользоваться словарем

2. @Джеймс, Спасибо! Вы имеете в виду сделать abr_state ключом, а имя состояния значением? Я действительно не знаю, как это поможет получить правильный результат. Не могли бы вы рассказать немного подробнее о том, что вы имеете в виду? Спасибо!

Ответ №1:

Вот длинный словарь двухбуквенных почтовых обозначений и соответствующих им штатов/провинций/областей.

 abbrevs = {  'AA': 'Armed Forces Americas',  'AB': 'Alberta',  'AE': 'Armed Forces Europe',  'AK': 'Alaska',  'AL': 'Alabama',  'AP': 'Armed Forces Pacific',  'AR': 'Arkansas',  'AS': 'American Samoa',  'AZ': 'Arizona',  'BC': 'British Columbia',  'CA': 'California',  'CD': 'Canada',  'CO': 'Colorado',  'CT': 'Connecticut',  'DC': 'Dist. Of Columbia',  'DE': 'Delaware',  'FF': 'Foreign Countries',  'FL': 'Florida',  'GA': 'Georgia',  'GU': 'Guam',  'HI': 'Hawaii',  'IA': 'Iowa',  'ID': 'Idaho',  'IL': 'Illinois',  'IN': 'Indiana',  'KS': 'Kansas',  'KY': 'Kentucky',  'LA': 'Louisiana',  'MA': 'Massachusetts',  'MB': 'Manitoba',  'MD': 'Maryland',  'ME': 'Maine',  'MI': 'Michigan',  'MN': 'Minnesota',  'MO': 'Missouri',  'MS': 'Mississippi',  'MT': 'Montana',  'MX': 'Mexico',  'NB': 'New Brunswick',  'NC': 'North Carolina',  'ND': 'North Dakota',  'NE': 'Nebraska',  'NH': 'New Hampshire',  'NJ': 'New Jersey',  'NL': 'Newfoundland and Labrador',  'NM': 'New Mexico',  'NS': 'Nova Scotia',  'NT': 'Northwest Territories',  'NU': 'Nunavut',  'NV': 'Nevada',  'NY': 'New York',  'OH': 'Ohio',  'OK': 'Oklahoma',  'ON': 'Ontario',  'OR': 'Oregon',  'PA': 'Pennsylvania',  'PE': 'Prince Edward Island',  'PR': 'Puerto Rico',  'QC': 'Quebec',  'RI': 'Rhode Island',  'SC': 'South Carolina',  'SD': 'South Dakota',  'SK': 'Saskatchewan',  'TN': 'Tennessee',  'TT': 'Trust Territory',  'TX': 'Texas',  'UN': 'Unknown',  'UT': 'Utah',  'VA': 'Virginia',  'VI': 'Virgin Islands',  'VT': 'Vermont',  'WA': 'Washington',  'WI': 'Wisconsin',  'WV': 'West Virginia',  'WY': 'Wyoming',  'YT': 'Yukon ', }  

Если у вас есть серия/фрейм данных, содержащий эти коды, вы можете заменить их с помощью:

 upload_list.State.replace(abbrevs, inplace=True)