Нахождение n максимальных значений (когда строки) столбца фрейма данных pandas

#python #pandas #dataframe

#питон #pandas #фрейм данных

Вопрос:

Я пытаюсь найти самые высокие значения столбца в моем фрейме данных. Однако, поскольку значения содержат % , они являются строками, а не целыми числами, что мешает мне использовать nlargest. Я хотел бы знать, могу ли я преобразовать строки в целые числа.

Вот пример моего кода:

 import pandas as pd
import re
test_data = {
            'Animal': ['Otter', 'Turtle', 'Chicken'],
            'Squeak Appeal': [12.8, 1.92, 11.4],
            'Richochet Chance': ['8%', '30%', '16%'],
            }        
test_df = pd.DataFrame(
                        test_data, 
                        columns=[ 'Animal', 'Squeak Appeal','Richochet Chance']
                        )
 

Мои попытки использовать nlargest:

 r_chance = test_df.nlargest(2, ['Richochet Chance'])
# TypeError: Column 'Richochet Chance' has dtype object, cannot use method 'nlargest' with this dtype
r_chance = test_df.nlargest(2, re.sub("[^0-9]", ""(['Richochet Chance'])))
# TypeError: 'str' object is not callable
 

Если нет разумного способа сделать это, я не останусь в отрицании. Я просто подумал, могу ли я избежать перебора большого df и преобразования строк в целые числа для нескольких столбцов.

Ответ №1:

Давайте преобразуем этот столбец в значения с плавающей запятой и извлекем верхние индексы:

 idx = (test_df['Richochet Chance']
          .str.strip('%')          # remove the ending %
          .astype(float)           # convert to float 
          .nlargest(2).index       # nlargest and index
      )
test_df.loc[idx]
 

Вывод:

     Animal  Squeak Appeal Richochet Chance
1   Turtle           1.92              30%
2  Chicken          11.40              16%