算是总结下pandas,numpy的一些基本、实用使用语法,基于一个学生信息表的样例数据。
文章结构为jupyter代码+返回截图。
实用技巧:jupyter 代码自动补全
anaconda 安装jupyter
jupyter代码自动补全:
1、pip install jupyter_contrib_nbextensions(在anaconda的命令窗口下)
2、jupyter contrib nbextension install --user --skip-running-check(在anaconda的命令窗口下)
3、点开 Nbextensions 的选项,并勾选 Hinterland(此步完成)
numpy,pandas这一块的用法很多,个人觉得记住常用的用法,对于一些不常使用的用法,混个脸熟,真正用的时候自动匹配,看看参数大概就有数了。
导入包:
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
使用字典方式创建dataframe对象:
#创建班级,学生,兴趣爱好,考试科目,学号,考试成绩的表
studentdata = pd.DataFrame({
'姓名':['alici','bob','cindy','dave','kopper'],
'学号':[100001,100002,100003,100005,100006],
'爱好':['篮球','足球','篮球','排球','足球'],
'科目':['语文','语文','数学','数学','语文'],
'成绩':np.random.randint(60,150,size=5)}
)
studentdata
设置索引
#修改学号为索引
studentdata.set_index(keys='学号',inplace=True)
studentdata
修改一个学生的成绩为空,用dave的成绩替换
#修改一个学生的成绩为空,用dave的成绩替换
studentdata.loc[100001,'成绩'] = np.nan
studentdata
studentdata.loc[100001,'成绩'] = studentdata.loc[100005,'成绩']
studentdata
增加一个空的学号,无数据
#增加一个空的学号,无数据
studentdata.loc[100007,:] = np.nan
studentdata
删除空行
#删除空行
studentdata.dropna(axis=0,how='any',inplace=True)
studentdata
添加一行相同的记录
#添加一行相同的记录
studentdata.loc[100008,:] = studentdata.loc[100001,:]
studentdata
查询重复记录
#查询重复记录
studentdata.duplicated(subset=['姓名','爱好','科目','成绩'])
删除重复的记录
#删除重复的记录
studentdata.drop_duplicates(subset=['姓名','爱好','科目','成绩'],inplace=True)
studentdata
计算学生的平均成绩
studentdata.loc[:,'成绩'].mean()
分组统计各科目的平均成绩
#分组统计各科目的平均成绩
stdatamean = studentdata.groupby(by='科目')[['成绩']].mean()
stdatamean
将平均成绩添加到最后一列
#将平均成绩添加到最后一列
studentdata =studentdata.merge(stdatamean,left_on='科目',right_index=True,suffixes=['','_平均']) #注意此处suffixes的用法
studentdata
重置索引
#将索引列重新作为列(恢复到数字索引) #区分索引的三个操作:reindex(),set_index(),reset_index()
studentdata.reset_index(inplace=True)
studentdata
map映射
#使用map映射,根据成绩判断是否及格,向map中传入函数
def isok(score):
if score >= 90:
return '是'
else:
return '否'
studentdata['是否及格'] = studentdata['成绩'].map(isok)
studentdata
#使用映射对爱好和科目进行编号
maps = {
'篮球':200001,
'足球':200002,
'排球':200003,
'语文':300001,
'数学':300002
}
studentdata.replace(maps,inplace=True)
studentdata