Настройка dataframe в Python - PullRequest
0 голосов
/ 01 марта 2019

Обычно я работаю в R, но я пытаюсь воссоздать некоторые R-скрипты на Python.Я был полусуксусным, но все еще не получал то, что мне нужно - или получал это эффективно.У меня большой набор данных об учениках, и я пытаюсь создать новый фрейм данных, выбирая только столбцы оценок, gpa и ACT для определенного класса.В RI есть

data = read.csv('path.csv', na='NULL')
dat <- subset(data, classnumber == 121 & grade != 'W' & grade != 'P')

convert_grades <- function(x) {
  A <- factor(x, levels=c("A","B","C","D","F"))
  values <- c(1,1,1,0,0)
  values[A]
}       

dataset = data.frame(convert_grades(dat$grade), dat$GPA, dat$act)

Есть две проблемы, с которыми я сталкиваюсь при попытке преобразовать это в python

1) Я не могу преобразовать буквенные оценки в 0 или 1. У меня естьбыл в состоянии преобразовать их в числовые значения на основе их расположения в алфавите, но не в формате 0 или 1.

2) Когда я подставляю свои данные в python на основе номера класса, я должен использовать

dat=dataset.loc[(data.classnumber == 121) | (data.classnumber == '121')]

, используя '121', возвращает все, кроме последних 15 строк, и только использование 121 обеспечивает тепоследние 15 строкЯ предполагаю, что последние 15 строк различного типа по какой-то причине.Есть ли способ сделать этот столбец одного типа?В RI знаю, я бы использовал

as.numeric(data$classnumber)

Любой эквивалент Python?

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 01 марта 2019

Насколько я понимаю, вы сталкиваетесь с двумя проблемами

  1. Чтобы преобразовать буквенные оценки в двоичные.Я предполагаю, что вы успешно создали фрейм данных в python и импортировали столбцы «Grades», «GPA», «ACT».Для преобразования используйте словарь с ключами, представляющими буквенную оценку, т. Е. («A», «B», «C», «D», «E») в нули и единицы.

Решение: Используйте функцию map () или replace ()

    convert ={'A' : 1, 'B' : 1, 'C' : 1, 'D' : 0, 'E' : 0}

отображает оценки в 0 и 1, а неопределенные значения в NaN

    df['Grades'] = df['Grades'].map(convert)

Замените значения в столбце «Оценки» на 1 и 0, не влияя на оценки, которые не определены

    df.replace(convert,inplace=True)
Похоже, номер класса содержит значения двух разных типов данных.Одним из решений является преобразование его в один тип данных, предпочтительно int

Проверка текущего типа данных df.dtypes()

, преобразование столбца в тип данных int

    df['classnumber'].astype(int)

PS:Это мой первый ответ в Stackoverflow.Любые советы или правки, необходимые для ответа приветствуются.

...