Administrator
发布于 2026-05-17 / 1 阅读
0

python-pandas

# pandas 数据预处理 基于numpy \`\`\`python # 读取csv文件(逗号隔开的文件) import pandas,os,numpy as np path = r"D:\\desktop\\Workspace\\PythonWorkSpace\\Machine-Learning\\asstes\\csv\\2019_student_teacher.csv" student_teacher = pandas.read_csv(path,encoding="gbk") \`\`\` \`\`\`python print(type(student_teacher)) # panda.core.frame.DataFrame 就像numpy中的numpy.array """ 序号 int64 准考证号 int64 姓名 object 报考专业代码 int64 报考专业 object 研究方向 object 培养模式 object 录取导师 object """ print(student_teacher.dtypes) # dtype: object print(student_teacher) # 打印全部信息 print(student_teacher.head()) # 打印前5条信息 print(student_teacher.head(3)) # 打印前3条信息 print(student_teacher.tail(5)) # 打印后边5条的信息 print(student_teacher.columns) #Index(\['序号', '准考证号', '姓名', '报考专业代码', '报考专业', '研究方向', '培养模式', '录取导师'\], dtype='object') print(student_teacher.shape) # (398, 8) \`\`\` # pandas中索引与计算,数据定位 \`\`\`python # 行取数据 """ 序号 1 准考证号 zzzzz 姓名 yyy 报考专业代码 85207 报考专业 电气工程(专业硕士) 研究方向 (全日制)电能质量检测与评估(研究所9) 培养模式 专业学位 录取导师 xxxx """ Name: 0, dtype: object print(student_teacher.loc\[1:3\]) print(student_teacher.loc\[\[1,2,3\]\]) """ 序号 准考证号 姓名 报考专业代码 报考专业 研究方向 培养模式 录取导师 1 2 kk xxx 80800 电气工程 (全日制)电力系统规划与运行分析(研究所10) 学术学位 teacher 2 3 kk yyy 85207 电气工程(专业硕士) (全日制)电力系统监测控制与运行分析(研究所10) 专业学位 teacher 3 4 kk zzz 85210 控制工程 (全日制)智能控制理论及应用(研究所13) 专业学位 teacher """ \`\`\` \`\`\`python # 列取数据 print(student_teacher\["报考专业"\]) """ 0 电气工程(专业硕士) 1 电气工程 2 电气工程(专业硕士) 3 控制工程 4 电子与通信工程 """ # 获取多个列,注意里边是list print(student_teacher\[\["报考专业","导师"\]\]) print(student_teacher.columns.tolist()) # \['序号', '准考证号', '姓名', '报考专业代码', '报考专业', '研究方向', '培养模式', '录取导师'\] print(student_teacher.loc\[0\]\["姓名"\]) #列之间计算 new = student_teacher\[x\]\*student_teacher\[y\] # 对应位置相乘,注意行数相同 # +- 维度相同 对应相加减 # 加减的若为常数 每个数值与常数+- # 添加新列 student_teacher\['new'\]=new print(student_teacher\["序号"\].max()) # 获取该列最大值 # 按照序号列排序, inplace =True表示在源DataFrame上修改,否则生成新的Frame, # 默认排序从小到大ascending=True,Flase 为从大到小 # 对于列中某些为空的 显示时为NaN, 排序是不管哪种都默认放最后 print(student_teacher.sort_values("序号",inplace=True,ascending=True)) xxx = student_teacher\["xxx"\] isNullOrNot = pandas.isnull(xxx) print(isNullOrNot) """ 为空的是True 0 False 1 True ... """ xxx\[isNullOrNot\] # len(....) 即可获取缺失值的个数 """ 对于一些加减乘除的操作 ,注意过滤NaN 否则计算机结果为NaN student_teacher\["xxx"\]\[isNullOrNot==False\] 过滤缺失值 student_teacher\["xxx"\].mean() 自带的直接过滤 为空的是True 0 NaN ... """ \`\`\` \`\`\`python #聚合函数,分组后求平均:基本思路是循环 #按照index分组,求values的平均值 values= 还可以为list aggfunc 默认为mean student_teacher.pivot_table(index="",values="",aggfunc=np.mean) student_teacher.dropna(axis=1,subset=\["xx","yy"\]) # 删除 列中为空的 0删除行中为空的 若为行 使用subnet = \[1,2,3\] student_teacher.loc\[83,"序号"\] # 直接定位到值 student_teacher.sort_index("Age") # 按照Age排序, 结果中多添加的index列与会按照age排序 student_teacher.sort_index("Age").reset_index(drop=True) # 表示原来的index不用了,形成新的 def func(data): return data student_teacher.apply(func) # 自定义函数 # DataFrame 内部子结构Series # 例如 某一列的type 就是 pandas.core.series.Series student_teacher\["xx"\] # 可再次对它进行切片 \`\`\` # 自定义Series \`\`\`python from pandas import Series id= student_teacher\["报考专业代码"\].values # type 为 np.array 即把 xx 列所有内容 放入 array name= student_teacher\["姓名"\].values # type 为 np.array 即把 xx 列所有内容 放入 array series =Series(name,index=id) series =Series(id,index=name) series\[\[85207,85210\]\] # 对series进行查找, index 为list中值的行,index可为str类型 """ id1 name id2 name2 ... """ print(series.index.tolist()) series.sort_index() # 按照index排序 series.sort_values() # 按照values排序 np.add(series,series) #series相加 (维度相同) series\[series\>50\] 选取符合条件的值 print(series\[series\>'85200'\]) new= student_teacher.set_index("姓名",drop=True) # 修改索引,并返回 新的Frame print(new.loc\['name'\]) # 此时查找行可通过姓名属性 data.drop(\["xxx"\],axis=1) #删除列# \`\`\` #