首页 > 解决方案 > 在python中设置数据框

问题描述

我通常在 R 中工作,但我正在尝试在 Python 中重新创建一些 R 脚本。我是半成功的,但仍然没有得到我需要的东西——或者没有有效地得到它。我有大量的学生数据集,我正在尝试创建一个新的数据框,只选择特定班级的成绩、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')]

using '121' 返回除最后 15 行之外的所有内容,仅使用 121 提供最后 15 行。由于某种原因,我假设最后 15 行是不同的类型。有没有办法使该列成为一种类型?在 RI 知道我会使用

as.numeric(data$classnumber)

任何python等价物?

任何帮助深表感谢!

标签: pythonrdataframesubset

解决方案


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

  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)

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


推荐阅读