python-pandas
# pandas 数据预处理 基于numpy # 读取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") # 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中索引与计算,数据定位 行取数据 # print(student_teacher.loc[0]) """ 序号 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 """ # 列取数据 # 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 ... """ # 聚合函数,分组后求平均:基本思路是循环 # 按照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 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) 删除列
# data.query("x>1 & y<2") 条件查询
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,如有问题, 可评论咨询.