Питон панды Два столбца указатель и регион.В регионе есть государство, а затем под ним города.Мне нужен новый столбец, который показывает соответствующее состояние - PullRequest
0 голосов
/ 03 декабря 2018
def get_list_of_university_towns():
with open('university_towns.txt', 'r') as f:
data = (line.rstrip() for line in f)
lines = list(line for line in data if line)
thing = [lines]     

indexx = [lines.index(line) for line in lines if '[edit]' in line]
numlist = [indexx]
wow = pd.DataFrame(thing)
tr = wow.T
tr.columns=['Region']

Когда я возвращаю код, он возвращает:

"""    Region
0   Alabama[edit]
1   Auburn (Auburn University)[1]
2   Florence (University of North Alabama)
3   Jacksonville (Jacksonville State University)[2]
4   Livingston (University of West Alabama)[2]
5   Montevallo (University of Montevallo)[2]
6   Troy (Troy University)[2]
7   Tuscaloosa (University of Alabama, Stillman Co...
8   Tuskegee (Tuskegee University)[5]
9   Alaska[edit]
10  Fairbanks (University of Alaska Fairbanks)[2]
11  Arizona[edit]
12  Flagstaff (Northern Arizona University)[6]
13  Tempe (Arizona State University)
14  Tucson (University of Arizona)
15  Arkansas[edit]
16  Arkadelphia (Henderson State University, Ouach...

Как получить его, чтобы я мог создать новый столбец с именем состояния, к которому добавляется имя состояния с соответствующим индексомгосударство?Индексная часть работает для возврата соответствующего индекса во все состояния.По сути, я хочу, чтобы он вернулся:

    Region    State
1   Auburn    Alabama
2   Florence  Alabama    etc..

1 Ответ

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

Вы должны иметь возможность перебирать строки и использовать if-else, чтобы определить, является ли линия состоянием или регионом.Кажется, что все состояния имеют тег [edit], поэтому любая строка с этим должна быть состоянием, иначе это регион.

Чтобы создать сам фрейм данных, мы можем создать список кортежей спервый элемент - это состояние, а второй - область (после соответствующей очистки текста).Затем передайте список пандам, которые элегантно преобразуют его в фрейм данных.

Потенциальное решение (хотя я не совсем уверен, как выглядит ваш текстовый файл):

data = []
for line in lines:
    if '[edit]' in line:
        state = line.replace('[edit]', '')
    else:
        region = line.split(' (')[0]
        data.append((state, region))
df = pd.DataFrame(data, columns=['state', 'region'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...