本章学习了数据读取加载、数据查看、描述性统计、数学统计、数据筛选、数据聚合、数据可视化、导出等,但只是各大版块的一小部分而已。现在开始总结一下。
一、引入文件,文件位置要在notebook里面,虽然但是我还是没找的位置在哪里,暂时方在pythonproject里面的。
import pandas as pd #引入pandas库
df = pd.read_excel('team.xlsx') #引入文件
df #文件阅读一下看看对不对
二、查询数据和验证数据
这一步是在整体看一下数据状况,可读性高。
df.info()
df.describe() #这是两个最好用的
df.shape # (100, 6) 查看行数和列数
df.info() # 查看索引、数据类型和内存信息
df.describe() # 查看数值型列的汇总统计
df.dtypes # 查看各字段类型
df.axes # 显示数据行和列名
df.columns # 列名
注意一下df.info()显示状况:
三、建立索引
df.set_index('name',inplace=True)
这一步是放弃原有的0123.......的序号,使用新的索引列,即以名字为索引信息。其中inplace=True,是指在原文档基础上修改,注意,这里并没有修改原Excel,从我们读 取数据后就已经和它没有关系了,我们处理的是内存中的df变量。
四、选取数据
这一段有点无聊,所以直接传上代码就好了,后续多写写就熟悉代码了。
# 查看指定列
df['Q1']
df.Q1 # 同上,如果列名符合Python变量名要求
# 选择多列
df[['team', 'Q1']] # 只看这两列,注意括号
df.loc[:, ['team', 'Q1']]
# 和上一行效果一样 df.loc[x, y]是一个非常强大的数据选择函数,其中x代表行,y代表
列,行和列都支持条件表达式,也支持类似列表那样的切片(如果要用自然索引,需要用
df.iloc[])
#查看指定行
df[df.index == 'Liver'] # 指定姓名
# 用自然索引选择,类似列表的切片
df[0:3] # 取前三行
df[0:10:2] # 在前10个中每两个 前面的0是代表着从0开始取
#指定行和指定列
df.loc['Ben', 'Q1':'Q4'] # 只看Ben的四个季度成绩
df.loc['Eorge':'Alexander', 'team':'Q4'] # 指定行区间
#条件选择
# 单一条件
df[df.Q1 > 90] # Q1列大于90的
df[df.team == 'C'] # team列为'C'的
df[df.index == 'Oscar'] # 指定索引即原数据中的name
# 组合条件
df[(df['Q1'] > 90) & (df['team'] == 'C')] # and关系
df[df['team'] == 'C'].loc[df.Q1>90] # 多重筛选
五、排序
df.sort_values(by='Q1') # 按Q1列数据升序排列
df.sort_values(by='Q1', ascending=False) # 降序
六、分组聚合
df.groupby('team').sum() # 按团队分组对应列相加
df.groupby('team').mean() # 按团队分组对应列求平均
# 不同列不同的计算方法
df.groupby('team').agg({'Q1': sum, # 总和
'Q2': 'count', # 总数
'Q3':'mean', # 平均
'Q4': max}) # 最大值
七、数据转化
df.groupby('team').sum().T
df.groupby('team').sum().stack()
df.groupby('team').sum().unstack()
这里要注意的是sum聚合后面要跟着(),不然会出错。
八、增加列
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() # 众数
十、绘图
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() # 横向柱状图
# 各Team四个季度总成绩趋势
df.groupby('team').sum().T.plot()
df.groupby('team').count().Q1.plot.pie() #饼状图
绘图的问题在于要分析什么在横坐标什么在纵坐标,就是考虑T,转置的问题,而分布有什么含义。
十一、数据导出
df.to_excel('team-done.xlsx') # 导出 Excel文件
df.to_csv('team-done.csv') # 导出 CSV文件
652

被折叠的 条评论
为什么被折叠?



