Индекс панд StringMethods теряет индекс - PullRequest
0 голосов
/ 10 июля 2019

Я только что заметил, что строковые операции над индексом Pandas DataFrame не поддерживают индекс, поэтому присвоение результата обратно в dataframe довольно неудобно.например (и тот случай, когда я это заметил):

import pandas as pd

df = pd.DataFrame(
  [[1,2],[3,4],[5,6]],
  index=['a11','b12','c13'])

df['num'] = df.index.str.extract('([0-9]+)')

дает мне:

     0  1  num
a11  1  2  NaN
b12  3  4  NaN
c13  5  6  NaN

, так как индекс потерян и просто возвращается к [0,1,2]

потребовалось немного отладки, чтобы понять, что это потеря индекса, поэтому я получал NaN, но как только я это сделал, было очевидно, что я мог просто сделать:

df['num'] = df.index.str.extract('([0-9]+)').set_index(df.index)

это правильно, или естьдругие методы, которые поддерживают индекс?

Ответы [ 3 ]

1 голос
/ 10 июля 2019

Вы можете использовать команду expand, чтобы получить те же результаты, что и вы, используя:

df['num'] = df.index.str.extract('([0-9]+)', expand=False)

expand=False возвращает серию, индекс или фрейм данных, поскольку у вас есть только одна группа извлечения, вы можете использовать параметр расширения.

1 голос
/ 10 июля 2019

Вам нужно будет использовать аргумент expand:

df['num'] = df.index.str.extract('([0-9]+)', expand=False)

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

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

Если True, вернуть DataFrame с одним столбцом на группу захвата. Если False, вернуть серию / индекс, если есть одна группа захвата или DataFrame, если существует несколько групп захвата.

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

1 голос
/ 10 июля 2019

Как насчет использования assign?

df.assign(num=df.index.str.extract('([0-9]+)').values)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...