• python-pandas


    # pandas 数据预处理 基于numpy
    # 读取csv文件(逗号隔开的文件)
    import pandas,os,numpy as np
    path = r"D:desktopWorkspacePythonWorkSpaceMachine-Learningasstescsv2019_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") 条件查询
  • 相关阅读:
    The 9th SWJTU ACM Final Tutorial
    The 9th SWJTU ACM Online Tutorial
    ACdream群赛(5) D Palindrome
    ACdream群赛(5)总结
    The 9th SWJTU ACM Qualification Tutorial
    IIUC Inter University Programming Contest 2012总结
    曾经流行的,即将流行的几种渲染模式(render pipeline)
    ogre线程及其死锁问题
    crysis shader系统简单分析
    编译并集成mono 2.6.4到应用程序中
  • 原文地址:https://www.cnblogs.com/Dean0731/p/11584605.html
Copyright © 2020-2023  润新知