Словарь не обрабатывает несколько значений - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь создать базу данных штатов и городов.

Каждое имя штата в таблице, которую я читаю, заканчивается буквами [edit], город с другой стороны либо оканчивается на ( text ) [ number ]

Я использовал regex для удаления текста в скобках и квадратных скобках, сохраненных состояний в списке для штатов и городов в другом списке для городов.

Затем я преобразовал эти два списка в словарь, в котором в качестве значения указан штат, а в качестве значения указан город.

Однако есть 517 городов, и когда я это делаю, я теряю 467 городов.Я предполагаю, потому что в настоящее время я не позволяю своему словарю обрабатывать несколько значений.Моя цель - создать фрейм данных размером 517x2 со столбцом состояния и столбцом города (город, соответствующий его состоянию).Если бы я создал фрейм данных из этого словаря, я бы получил только 50х2, а не 512х2.

Мой вопрос таков;i.) мои правильные рассуждения, ii.) как я должен думать о решении этой проблемы / как я должен ее решить, iii.) код, который я написал, самый эффективный способ достижения моей конечной цели

import pandas as pd
import numpy as np
import re
state = []
city = []
with open("university_towns.txt","r") as i:
    uni = i.readlines()
for st in uni:
    if "[edit]"in st:
        state.append(re.sub("[\\[].*?[\\]]\s", "", st))
    else:
        city.append(re.sub("[\(\[].*?[\)\]]\s", "", st))
city_st = dict(zip(state,city))
#need to take the key-value pairs/items from the dictionary
s = pd.Series(city_st, name ='RegionName')
s.index.name = 'State'
s = s.reset_index()
s

ДОБАВИТЬ: не совсем уверен, как добавить соответствующие данные для этого вопроса

1 Ответ

0 голосов
/ 11 декабря 2018

Обратите внимание, что:

city_st = dict(zip(state,city))

эта операция может привести к уменьшению числа ваших результатов из-за множественного значения.

вы можете просто использовать

aa = pd.dataframe({'state': state,'city': city})
aa['State' ] = range(aa.shape[0])

тогдаиспользуйте сводную таблицу, чтобы растопить ваши данные

...