python-pandas

2020-05-08 15:34:44 浏览数 (1)

代码语言:javascript复制
# 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") 条件查询

0 人点赞