Как создать новый столбец, выбирая информацию из существующего, с помощью .find () (или альтернативы для поиска) в Python? - PullRequest
0 голосов
/ 10 июля 2019

'Мне нужно создать новый столбец, выбирая конкретную информацию из существующего столбца. В этом случае я хочу создать новый столбец с именем «name», выбирая только имена из столбца «id_name».

import pandas as pd
df = {'id': [234235, 543, 34234],
      'id_name': ['234235nombre: Paco_ID','543nombre: Lucia_ID','34234nombre:Marta_ID'],
      'age': [35, 29, 40]}
df= pd.DataFrame(df)
df

     id          id_name           age
0   234235  234235nombre: Paco_ID   35
1   543     543nombre: Lucia_ID     29
2   34234   34234nombre:Marta_ID    40


df['name'] = df['id_name'].find("nombre: ")+8:df[id_name].find("_ID")

  File "<ipython-input-34-4e5aa874634b>", line 1
     df['name'] = (df[id_name].find("nombre: ")+8):(df[id_name].find("_ID"))
                                             ^
SyntaxError: invalid syntax

Ожидаю в качестве вывода следующую таблицу:

     id          id_name           age   name
0   234235  234235nombre: Paco_ID   35   Paco
1   543     543nombre: Lucia_ID     29   Lucia
2   34234   34234nombre:Marta_ID    40   Marta

решаемые !!!!!! (спасибо Ромми):

df['name']=df.id_name.str.split(':').str[1].str.split('_').str[0]

Мне также нужна альтернатива для целых чисел. Кто-нибудь знает, как я могу создать новый столбец с именем 'new_hour', извлекающий часы из столбца 'time' со следующим новым вводом?

Введите:

import pandas as pd
df = {'time': ['[{"hour":"00:00","postCount":"12"...','[{"nexthour":"05:00","postCount":"3"...'],
   'age': [35, 29]}
df= pd.DataFrame(df)

Фактическая выработка:

                   time                     age
0   [{"hour":"00:00","postCount":"12"...     35
1   [{"nexthour":"05:00","postCount":"3"...  29

Код должен быть примерно таким, но он не работает:

df['new_hour'] = df.time.str.split('"hour":').str[1].str.split('"').str[0]
df.head()

Желаемый вывод:

                   time                     age  new_hour
0   [{"hour":"00:00","postCount":"12"...     35   00:00
1   [{"nexthour":"05:00","postCount":"3"...  29   05:00

Ответы [ 2 ]

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

Попробуйте это:

df['name']=df.id_name.str.split(':').str[1].str.split('_').str[0]
1 голос
/ 10 июля 2019

Я думаю, что подход регулярных выражений будет работать лучше. Примерно так:

df['name'] = df['id_name'].str.extract(".*nombre:\s?([A-Z][a-z]+)_ID")
  • .*nombre:\s? соответствует чему-либо, за которым следует номер и дополнительный пробел
  • [A-Z][a-z]+ соответствует слову с заглавной буквой (строчными после)
  • _ID: заканчивается _ID

В скобках указана часть, которую вы хотите извлечь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...