在python中设置数据帧

问题描述 投票:0回答:1

我通常在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等价?

任何帮助深表感谢!

python r dataframe subset
1个回答
1
投票

根据我的理解,你面临着两个问题

  1. 将字母等级转换为二进制等级。我假设你已经在python中成功创建了一个数据帧并导入了“Grades”,“GPA”,“ACT”列。对于你的转换,使用一个字母,其中键是字母等级,即('A','B','C','D','E')为零和1。

解决方案:使用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. 看起来类号包含两种不同数据类型的值。一种解决方案是将其转换为单个数据类型,最好是int

检查当前数据类型qazxsw poi

将列转换为int数据类型

df.dtypes()

P.S:这是我在Stackoverflow中的第一个答案。欢迎提出答案所需的任何提示或编辑。

© www.soinside.com 2019 - 2024. All rights reserved.