Как выбрать значения столбца dataframe в указанном диапазоне? - PullRequest
1 голос
/ 12 июля 2020

Это мой код:

df = pd.read_csv("/content/Intel_AI4Y/My Drive/Intel_AI4Y_Colab/Module_16/data/Students_Score1.csv")

names = ["Student No." ,"Hours spent studying in a day", "Mathematics score", "English score","Science score"]

df.columns = names

Mathematics_score = df.iloc[:, 0]

df = df[~df.iloc[:, 0].between(100, 0, inclusive=False)]

print(df.describe())

print (df.info())

Я пытаюсь удалить ошибочные данные из оценки по математике, значение ниже 0 или выше 100. Я не уверен, как я могу go о кодировании. Кто-нибудь может помочь?

Ответы [ 2 ]

1 голос
/ 12 июля 2020
  • df = df[~df.iloc[:, 0].between(100, 0, inclusive=False)] почти правильно
  • pandas.Series.between требует левой и правой границы, которые должны быть 0 и 100 соответственно.
  • ~ равно not, поэтому в действительности df.iloc[:, 0].between(0, 100, inclusive=False) возвращает все от 0 до 100, но ~df.iloc[:, 0].between(0, 100, inclusive=False) возвращает значения <=0 и >=100.
  • Чтобы вернуть значения от 0 до 100, используйте df[df.iloc[:, 0].between(0, 100, inclusive=False)]
  • См. также Pandas: Индексирование и выбор данных
  • См. Pandas: Выбор по позиции для правильного использования из .iloc. df.iloc[:, 0] означает, что вы выбрали все строки, : и столбец с индексом 0. В моих выборочных данных есть только один столбец, поэтому индекс 0. Вам необходимо проверить индекс интересующей вас колонки.
import pandas as pd
import numpy as np

# sample dataframe
np.random.seed(100)
df = pd.DataFrame({'values': [np.random.randint(-100, 200) for _ in range(500)]})

# values between 0 and 100
df[df.iloc[:, 0].between(0, 100, inclusive=False)]

 values
     43
     37
     55
     41
     35

# values <=0 or >=100
df[~df.iloc[:, 0].between(0, 100, inclusive=False)]

 values
    -92
    180
    -21
    -47
    -34
0 голосов
/ 12 июля 2020

Поскольку ваш фрейм данных идет с заголовками. Я бы действительно посоветовал использовать фильтр по маске следующим образом.

df = df[(df['Mathematics score'] > 0) & (df['Mathematics score'] < 100)]

Как было предложено @Trenton McKinney, верно, что использование iloc иногда проще, потому что вам не нужно вводить имя столбца .

Итак, в вашем случае, поскольку столбец Mathematics score является третьим, вам следует сделать:

df[~df.iloc[:, 2].between(0, 100, inclusive=False)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...