#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()