Извлечь строку из столбца по определенной схеме - PullRequest
0 голосов
/ 30 апреля 2018

Пожалуйста, прости мой вопрос новичка о панде, но у меня есть столбец городов и штатов США, например, сокращенная версия, показанная ниже (По какой-то странной причине название столбца называется «Алабама [править]», которое связано с первыми 0-7 значениями города в столбце):

0                          Auburn (Auburn University)[1]
1                 Florence (University of North Alabama)
2        Jacksonville (Jacksonville State University)[2]
3             Livingston (University of West Alabama)[2]
4               Montevallo (University of Montevallo)[2]
5                              Troy (Troy University)[2]
6      Tuscaloosa (University of Alabama, Stillman Co...
7                      Tuskegee (Tuskegee University)[5]
8                                           Alaska[edit]
9          Fairbanks (University of Alaska Fairbanks)[2]
10                                         Arizona[edit]
11            Flagstaff (Northern Arizona University)[6]
12                      Tempe (Arizona State University)
13                        Tucson (University of Arizona)
14                                        Arkansas[edit]
15     Arkadelphia (Henderson State University, Ouach...
16     Conway (Central Baptist College, Hendrix Colle...
17              Fayetteville (University of Arkansas)[7]
18              Jonesboro (Arkansas State University)[8]
19            Magnolia (Southern Arkansas University)[2]
20     Monticello (University of Arkansas at Monticel...
21            Russellville (Arkansas Tech University)[2]
22                        Searcy (Harding University)[5]
23                                      California[edit]

Города, которые находятся в каждом штате, находятся под каждым названием штата, например, Фэрбенкс (значение столбца 9) - город в штате Аляска.

Я хочу разделить названия городов на основе названий штатов, чтобы у меня было два столбца 'State' и 'RegionName', где каждое название штатов связано с каждым названием города, например:

                            RegionName                       State
0                          Auburn (Auburn University)[1]    Alabama
1                 Florence (University of North Alabama)    Alabama
2        Jacksonville (Jacksonville State University)[2]    Alabama
3             Livingston (University of West Alabama)[2]    Alabama
4               Montevallo (University of Montevallo)[2]    Alabama
5                              Troy (Troy University)[2]    Alabama
6      Tuscaloosa (University of Alabama, Stillman Co...    Alabama
7                      Tuskegee (Tuskegee University)[5]    Alabama

8         Fairbanks (University of Alaska Fairbanks)[2]     Alaska

9         Flagstaff (Northern Arizona University)[6]        Arizona
10                      Tempe (Arizona State University)    Arizona
11                        Tucson (University of Arizona)    Arizona                                              

12        Arkadelphia (Henderson State University, Ouach... Arkansas                                           

. , .так далее.

Я знаю, что за каждым названием штата следует строка «[edit]», которую, как я полагаю, я могу использовать для разделения и присвоения названий городов. Но я не знаю, как это сделать.

Кроме того, я знаю, что мне нужно выполнить много других операций по очистке данных, таких как удаление строк в скобках и в скобках '[]'. Это можно сделать позже ... важная часть - это разделение штатов и городов и присвоение каждому городу соответствующего США. Любой совет будет наиболее ценным.

1 Ответ

0 голосов
/ 01 мая 2018

Без особого контекста или доступа к вашим данным я бы предложил что-то в этом роде. Сначала измените код, который читает ваши данные:

df = pd.read_csv(..., header=None, names=['RegionName']) 
# add header=False so as to read the first row as data

Теперь извлеките имя состояния, используя str.extract, оно должно извлекать имена только до тех пор, пока они заменяются подстрокой "[edit]". Затем вы можете заполнить все значения NaN, используя ffill.

df['State'] = df['RegionName'].str.extract(
    r'(?P<State>.*)(?=\s*\[edit\])'
).ffill()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...