Pandas dataframe, разделяет данные по последнему столбцу в последней позиции, но сохраняет другие столбцы

python pandas dataframe

387 просмотра

1 ответ

416 Репутация автора

Очень новый для панд, поэтому любое объяснение с решением приветствуется.

У меня есть датафрейм, такой как

    Company                             Zip State City
1   *CBRE                               San Diego, CA 92101
4   1908 Brands                         Boulder, CO 80301
7   1st Infantry Division Headquarters  Fort Riley, KS
10  21st Century Healthcare, Inc.       Tempe 85282
15  AAA                                 Jefferson City, MO 65101-9564

Я хочу разделить столбец Zip State city в моих данных на 3 разных столбца. Используя ответ из этого поста, Pandas DataFrame, как разделить столбец на два, я мог бы выполнить эту задачу, если бы у меня не было моего первого столбца. Написание регулярного выражения для всех компаний просто приводит к тому, что я фиксирую все в моих данных.

Я тоже пробовал

foo = lambda x: pandas.Series([i for i in reversed(x.split())])
data_pretty = data['Zip State City'].apply(foo)

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

Как я могу разделить мой последний столбец, сохраняя данные столбца компании?

Автор: Jstuff Источник Размещён: 18.07.2016 04:32

Ответы (1)


8 плюса

137836 Репутация автора

Решение

Вы можете использовать метод extract () :

In [110]: df
Out[110]:
                               Company                 Zip State City
1                                *CBRE            San Diego, CA 92101
4                          1908 Brands              Boulder, CO 80301
7   1st Infantry Division Headquarters                 Fort Riley, KS
10       21st Century Healthcare, Inc.                    Tempe 85282
15                                 AAA  Jefferson City, MO 65101-9564

In [112]: df[['City','State','ZIP']] = df['Zip State City'].str.extract(r'([^,\d]+)?[,]*\s*([A-Z]{2})?\s*([\d\-]{4,11})?', expand=True)

In [113]: df
Out[113]:
                               Company                 Zip State City            City State         ZIP
1                                *CBRE            San Diego, CA 92101       San Diego    CA       92101
4                          1908 Brands              Boulder, CO 80301         Boulder    CO       80301
7   1st Infantry Division Headquarters                 Fort Riley, KS      Fort Riley    KS         NaN
10       21st Century Healthcare, Inc.                    Tempe 85282          Tempe    NaN       85282
15                                 AAA  Jefferson City, MO 65101-9564  Jefferson City    MO  65101-9564

Из документов :

Series.str.extract(pat, flags=0, expand=None)

Для каждой строки темы в Серии извлеките группы из первого совпадения регулярного выражения pat.

Новое в версии 0.13.0.

Параметры:

pat : string

Шаблон регулярного выражения с группами захвата

флаги : int, по умолчанию 0 (без флагов)

флаги re модуля, например re.IGNORECASE .. versionadded :: 0.18.0

развернуть : bool, по умолчанию False

Если True, верните DataFrame.

Если False, вернуть Series / Index / DataFrame.

Возвращает : DataFrame с одной строкой для каждой строки темы и одним столбцом для каждой группы. Любые имена групп захвата в регулярном выражении pat будут использоваться для имен столбцов; в противном случае будут использованы номера групп захвата. Тип d каждого столбца результата всегда является объектом, даже если совпадений не найдено. Если expand = True, а pat имеет только одну группу захвата, тогда вернуть серию (если тема - серия) или индекс (если тема - индекс).

Автор: MaxU Размещён: 18.07.2016 04:46
Вопросы из категории :
32x32