在python中设置数据框

时间:2019-03-01 18:26:14

标签: python r dataframe subset

我通常在R中工作,但是我试图在Python中重新创建一些R脚本。我一直在半神半熟,但仍然没有得到我所需要的东西-还是没有有效地得到它。我有大量的学生数据集,我正在尝试创建一个新的数据框,只为特定班级选择成绩,gpa和ACT列。在R中,我有

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行是不同的类型。有没有办法使此列成为单一类型? 在R中,我知道我会使用

as.numeric(data$classnumber)

是否有与之等效的python?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

据我了解,您面临两个问题

  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)
  1. 好像classnumber包含两种不同数据类型的值。一种解决方案是将其转换为单个数据类型,最好是int

检查当前数据类型 df.dtypes()

将列转换为int数据类型

    df['classnumber'].astype(int)

P.S:这是我在Stackoverflow中的第一个答案。欢迎对答案进行任何提示或修改。