Добавьте вложенную строку в начале фрейма данных, а не в конце

#python #python-3.x #pandas

#python #python-3.x #pandas

Вопрос:

Я хотел бы извлечь вложенную строку из Name и добавить ее перед Address , но cat по умолчанию добавляет ее в конец.

Мои данные:

 Name                              | Address
Eleanor A. Martin #/222  Rhapsody | Street 32601 Florida
Ann K. Wagner                     | 3071 Half and Half Drive Hialeah FL 33012
  

Мой код:

 df = pd.DataFrame([['Eleanor A. Martin #/222  Rhapsody ','Street 32601 Florida'],['Ann K. Wagner','3071 Half and Half Drive Hialeah FL 33012']],columns=['Name','Address'])   

df['Address'] = df['Address'].str.cat(df['Name'].str.extract(r'#/(.*)'), sep=' ', na_rep = '').str.strip()
  

Текущий результат:

 Name                              | Address
Eleanor A. Martin #/222  Rhapsody | Street 32601 Florida 222  Rhapsody
Ann K. Wagner                     | 3071 Half and Half Drive Hialeah FL 33012
  

Желаемый результат:

 Name                              | Address
Eleanor A. Martin #/222  Rhapsody | 222  Rhapsody Street 32601 Florida
Ann K. Wagner                     | 3071 Half and Half Drive Hialeah FL 33012
  

Это не работает в моем наборе (путает разные строки)

 df['Address'] = df['Name'].str.extract(r'#/(.*)')   " "   df['Address']
  

Как я могу добавить вложенную строку из Name перед строкой в Address ?

Ответ №1:

Сначала добавьте параметр expand=False для Series from Series.str.extract , добавьте разделитель и замените отсутствующие значения пустой строкой, в последнюю очередь добавьте второй столбец:

 df['Address'] = (df['Name'].str.extract(r'#/(.*)', expand=False).add(" ").fillna('')   
                 df['Address'])
  

Альтернатива:

 df['Address'] = ((df['Name'].str.extract(r'#/(.*)', expand=False)   " ").fillna('')   
                 df['Address'])
  

 print (df)

                                 Name  
0  Eleanor A. Martin #/222  Rhapsody    
1                       Ann K. Wagner   

                                     Address  
0        222  Rhapsody  Street 32601 Florida  
1  3071 Half and Half Drive Hialeah FL 33012  
  

Комментарии:

1. Еще раз большое спасибо Израэлю. Иногда я близок, но ищу решение часами

Ответ №2:

Аналогично вашему оригинальному решению:

df['Address'] = df['Name'].str.extract(r'#/(.*)').str.cat(df['Address'], sep=' ', na_rep = '').str.strip()