У меня есть грубый df, извлеченный из таблицы данных PDF, состоящей из одного столбца, содержащего строки. Каждая запись в столбце имеет следующую форму:

Mayor ............... Paul Jones
Senator ................. Billy Twister
Congress Rep. .......... Chris Rock
Chief of Staff ....... Tony Allen

Я хотел бы использовать string.split(pat="."), чтобы разделить эти строки на два столбца для Title и Name, используя строки с точками. Однако каждая запись в столбце имеет разную длину разделителя строки периода. Как и ожидалось, если я использую, например, pat="." или pat=".......", я получаю несогласованные разделения.

Моя цель - реализовать способ, позволяющий разделителю обрабатывать диапазон длин строки периода для заданной минимальной и максимальной длины. Я искал этот вопрос в Google и не смог найти прямого ответа. Возможно ли это реализовать?

1
LennyAngola 27 Ноя 2021 в 20:10
Если вы используете регулярное выражение, \.+ будет соответствовать одной или нескольким точкам.
 – 
Steele Farnsworth
27 Ноя 2021 в 20:20

1 ответ

Лучший ответ

Используйте Series.str.split с регулярное выражение \s+\.+\s+, которое разбивается на 1+ пробелов, 1+ точек, 1+ пробелов:

df = pd.DataFrame({'A': ['Mayor ............... Paul Jones', 'Senator ................. Billy Twister', 'Congress Rep. .......... Chris Rock', 'Chief of Staff ....... Tony Allen']})

df[['Title', 'Name']] = df['A'].str.split('\s+\.+\s+', expand=True)

#                                          A           Title           Name
# 0         Mayor ............... Paul Jones           Mayor     Paul Jones
# 1  Senator ................. Billy Twister         Senator  Billy Twister
# 2      Congress Rep. .......... Chris Rock   Congress Rep.     Chris Rock
# 3        Chief of Staff ....... Tony Allen  Chief of Staff     Tony Allen
3
Karl Knechtel 27 Ноя 2021 в 20:51