pandas dataframe loc не удается определить правильное имя

#pandas #dataframe #pandas-loc

#pandas #dataframe #pandas-loc

Вопрос:

Во-первых, мне пришлось импортировать некоторые данные, выполнив следующее:

 from eliteprospect import eliteprospect_scraper as ep
import numpy as np
import pandas as pd

nhl_2020 = ep.getPlayers('nhl', '2019-20')
players = pd.concat([nhl_2020])
lakings = players.loc[players['team'] == 'Los Angeles Kings']
lakingsdefs = lakings.loc[lakings['fw_def'] == 'DEF']
lakingsdefs_pos = lakingsdefs[['playername','position']]
##print(lakingsdefs_pos)
 

Затем я получаю очень простой dataframe, созданный с помощью Pandas следующим образом:

                             playername position
                178      Drew Doughty         D
                295       Sean Walker         D
                382          Matt Roy         D
                403        Ben Hutton         D
                554  Kurtis MacDermid         D
                632       Joakim Ryan         D
                743    Mikey Anderson         D
                758        Paul LaDue         D
                859   Tobias Björnfot         D
                876       Kale Clague         D
 

Я попробовал следующий код, чтобы выбрать «Joakim Ryan».

 print(lakingsdefs_pos.loc[lakingsdefs_pos['playername'] == 'Joakim Ryan'])
 

К сожалению, не удалось выделить строку с ‘Joakim Ryan’ в ней.

С другой стороны, когда я попробовал то же самое с ‘position’, похоже, это сработало.

 print(lakingsdefs_pos.loc[lakingsdefs_pos['position'] == 'D'])
 

Просто распечатайте весь список, как и должно быть.

Я надеюсь вывести что-то вроде следующего:

        playername position
632  Joakim Ryan         D
 

Ответ №1:

Давайте попробуем .str.contains() метод;

 lakingsdefs_pos[lakingsdefs_pos['playername'].str.contains('Joakim Ryan')]#If you only have the two columns

lakingsdefs_pos.loc[lakingsdefs_pos['playername'].str.contains('Joakim Ryan'),['playername','position']]#If you have other columns other than position and playername


      playername   position
632  Joakim Ryan        D
 

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

1. Спасибо. Первый — это в значительной степени то, что я хотел, но форматирование вывода отличается от формата вывода print(lakingsdefs_pos.loc[lakingsdefs_pos['position'] == 'D']) .

2. print(lakingsdefs_pos.loc[lakingsdefs_pos['playername'].str.contains('Joakim Ryan'),'playername']) должен выводиться тот же формат. Ваша печать возвращает больше, чем серия. Они не могут быть одинаковыми. Итак, на ваш вопрос дан ответ?

3. print(lakingsdefs_pos.loc[lakingsdefs_pos['playername'].str.contains('Joakim Ryan'),'playername']) выводит только его имя. Я надеялся вывести что-то, что я только что добавил к основному тексту.

4. Мой первый ответ; lakingsdefs_pos[lakingsdefs_pos['playername'].str.contains('Joakim Ryan')] будет делать то же самое. Выходные данные будут отличаться, если у вас будет больше столбцов. У вас есть еще столбцы? Мы можем работать над этим

5. Пожалуйста, посмотрите мои правки. Я включил опцию для случаев, когда у вас несколько столбцов.