终端安装,执行命令:
pip install pandas matplotlib
安装后,启动Jupyter Notebook,导入pandas
#导入,起别名pd
import pandas as pd
(二)准备数据集
数据集(dataset),相当于excel表格
参考数据集可从https://www.gairuo.com/file/data/dataset/team.xlsx下载
读取数据到pandas里,变量名为df(DataFrame缩写,pandas二维数据基础结构)
df=pd.read_excel('https://www.gairuo.com/file/data/dataset/team.xlsx')
#查看数据
df
output:
- 自动增加了索引(第一列)
- 从0开始 自动隐藏了中间
- 只显示了前后5条 底部有行列数(row column)
其他常用方式:
- 读取函数一般会赋值给一个变量 df, df = pd.read_()
- 输出函数是将变量自身进行 *** 作并输出df.to_()
#括号内可以写想看的条数
df.head()#前5条
df.tail()#尾部5条
df.sample(5)#随机查看5条
(五)验证数据
#行列数
df.shape
#索引、数据类型、内存信息
df.info()
#数值类型汇总统计
df.describe()
#各字段类型
df.dtypes
#行列名
df.axes
#列名
df.columns
(六)建立索引
把 name 列变成索引
df.set_index("name",inplace=True) #建立索引并生效
inplace=True使设置的索引生效
没有修改原来的excel,处理的是df变量
OUT:
一、选择列
1、查看单列
#查看指定列Q1
df['Q1']
#如果符合变量名要求,可以使用
df.Q1
OUT:
返回的是Series类型的数据(即带索引的数列)
2、查看多列
#注意括号
df[['team','Q1']]
#使用df.loc[x,y]
df.loc[:,['team','Q1']]
df.loc[x,y]是数据选择函数,x是列,y是行,都可以采用条件表达式,可用切片
用自然索引需要用df.iloc[]
二、选择行
1、用制定索引选取
df[df.index=='Liver']
2、用自然索引,类似切片
#前三个
df[0:3]
#前十个每两个选一个
df[0:10:2]
#前十个
df.iloc[:10,:]
三、选择行列
同时指定行列范围
df.loc['Ben','Q1':'Q4']
df.loc['Eorge':'Alexander','team':'Q4']
四、条件选择
1、单一条件
df[df.Q1 > 90]
df[df.team == 'C']
df[df.index == 'Oscar']
2、组合条件
#and &
df[(df['Q1'] > 90) & (df['team'] == 'C')]
#多重筛选
df[df['team'] == 'C'].loc[df.Q1>90]
(八)排序
#升序
df.sort_values(by='Q1')
#降序
df.sort_values(by='Q1', ascending=False)
#team升序,Q1降序
df.sort_values(['team', 'Q1'], ascending=[True, False])
(九)分组聚合
类似SQL的groupby的数据透视功能:
1、分组后对应列相加
df.groupby('team').sum() # 按团队分组对应列相加
2、分组后求平均
df.groupby('team').mean() # 按团队分组对应列求平均
3、不同列不同计算
df.groupby('team').agg({'Q1': sum,
'Q2': 'count',
'Q3':'mean',
'Q4': max})
(十)数据转换
进行转置,按照轴对称翻转
df.groupby('team').sum().T
对聚合后的数据转置:
df.groupby('team').sum().stack()
out:
df.groupby('team').sum().unstack()
out:
#增加一个固定值的列
df['one'] = 1
#增加总成绩列,指定一些列相加增加一个新列
df['total'] = df.Q1 + df.Q2 + df.Q3 + df.Q4
#把计算的结果复制给新的列
df['total'] = df.loc[:,'Q1':'Q4'].apply(lambda x:sum(x), axis=1)
# 可以把所有为数字的列相加
df['total'] = df.sum(axis=1)
# 增加平均成绩列
df['avg'] = df.total/4
(十二)统计分析
df.mean() # 返回所有列的均值
df.mean(1) # 返回所有行的均值,下同
df.corr() # 返回列与列之间的相关系数
df.count() # 返回每一列中的非空值的个数
df.max() # 返回每一列的最大值
df.min() # 返回每一列的最小值
df.median() # 返回每一列的中位数
df.std() # 返回每一列的标准差
df.var() # 方差
s.mode() # 众数
(十三)绘图
使用matplotlib画图
df['Q1'].plot() # Q1 成绩的折线分布
df.loc['Ben','Q1':'Q4'].plot() # ben 四个季度的成绩变化
df.loc[ 'Ben','Q1':'Q4'].plot.bar() # 柱状图
df.loc[ 'Ben','Q1':'Q4'].plot.barh() # 横向柱状图
df.groupby('team').sum().T.plot() # 各 Team 四个季度总成绩趋势
df.groupby('team').count().Q1.plot.pie() # 各组人数对比
(十四)导出
导出文件在notebook文件的同一目录下
df.to_excel('team-done.xlsx') # 导出 excel
df.to_csv('team-done.csv') # 导出 csv
(十五)小结
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)