#python #pandas #string #split #expand
#python #pandas #строка #разделение #Развернуть
Вопрос:
all_data['Title']= all_data['Name'].str.split(', ', expand=True)[1].str.split('.', expand=True)[0]
Кто-нибудь может объяснить, в чем смысл этой строки кода? Особенно с expand=True
и [1]
[0]
.
Комментарии:
1. Это не обычный метод разбиения строки, это конкретный метод любого объекта, который
all_data['Name'].str
возвращается. Я полагаю, что здесь вы работаете с фреймом данных Pandas, вам нужно просмотреть документацию Pandas, чтобы узнать, какие методы определяют его объекты и какие параметры они принимают.
Ответ №1:
Если вы используете Pandas, вполне вероятно, что вы знаете также ноутбуки Jupyter. Итак, для простоты и удобочитаемости давайте дополним опубликованный вами код некоторой дополнительной информацией в формате, подобном блокноту:
(this markdown is here to override an error in the answer window interpreter)
```lang-python
import pandas as pd
raw_name = ['Bob, Mr. Ross', 'Alice, Mrs. Algae', 'Larry, Mr. lemon', 'John, Mr. Johnson']
all_data = pd.DataFrame({'Name': raw_name})
# This the OP's line
all_data['Title'] = all_data['Name'].str.split(', ', expand=True)[1].str.split('.', expand=True)[0]
all_data
Имя | Название | |
---|---|---|
0 | Боб, мистер Росс | Mr |
1 | Алиса, миссис Водоросли | Mrs |
2 | Ларри, мистер Лемон | Mr |
3 | Джон, мистер Джонсон | Mr |
Где expand=True
отображается набор столбцов строк. Поэтому после первого разделения вы можете снова применить другой str.split
метод, поскольку первое разделение отобразило фрейм данных из строк в виде столбцов. Это было бы немного сложнее с обычным разделением (или expand=False
), которое отображает серию списков.
Лучше объяснить примерами кода:
all_data['Name'].str.split(', ', expand=False) # or no expand at all
0 | |
---|---|
0 | [Боб, мистер Росс] |
1 | [Алиса, миссис Водоросли] |
2 | [Ларри, мистер Лемон] |
3 | [Джон, мистер Джонсон] |
all_data['Name'].str.split(', ', expand=True)
0 | 1 | |
---|---|---|
0 | Боб | Мистер Росс |
1 | Алиса | Миссис Водоросли |
2 | Ларри | Мистер Лемон |
3 | Джон | Мистер Джонсон |
all_data['Name'].str.split(', ', expand=True)[1].str.split('.', expand=False)
0 | |
---|---|
0 | [Мистер, Росс] |
1 | [Миссис, водоросли] |
2 | [Mr, Lemon] |
3 | [Мистер Джонсон] |
all_data['Name'].str.split(', ', expand=True)[1].str.split('.', expand=True)
0 | 1 | |
---|---|---|
0 | Mr | Росс |
1 | Mrs | Водоросли |
2 | Mr | Lemon |
3 | Mr | Джонсон |
Ссылка:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas .Series.str.split.html
Комментарии:
1. Ошибка, которая продолжает появляться: "Похоже, что ваш пост содержит код, который неправильно отформатирован как код. Пожалуйста, сделайте отступ во всем коде на 4 пробела, используя кнопку code toolbar или сочетание клавиш CTRL K. Для получения дополнительной справки по редактированию щелкните значок на панели инструментов [?]. "
Ответ №2:
Взгляните сюда: pandas.Series.str.split
Разложите разделенные строки на отдельные столбцы.
Если True, верните расширяющуюся размерность фрейма данных / мультииндекса.
Если False, верните ряд / индекс, содержащий списки строк.
s = pd.Series(
[
"this is a regular sentence",
]
)
s.str.split(expand=True)
0 1 2 3 4
это обычное предложение