разделение строки с расширением = True. Кто-нибудь может объяснить, в чем смысл?

#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

это обычное предложение