现在使用Python处理表格类数据(excel/csv)已经成为工作不可或缺的技能,尤其大数据量的分析筛选转换,Python更可以提供无与伦比的优势,使用Python处理数据,那Pandas就肯定绕不开,这篇就是Pandas的简单应用。
Pandas 数据分析包
使用只需引入即可
import pandas as pd #引入Pandas
处理表格
- 获取表格数据
我们日常大部分情况都会使用excel,所以这次使用Pandas来处理excel作为例子
数据准备Person.xlsx:
path = '/Users/lishiwen/Downloads/' #文件路径
fileName = 'Person' #文件名
excel = pd.read_excel(path + fileName + '.xlsx') #pandas读取excel数据
df = pd.DataFrame(excel) #数据转化为pd中的dataframe格式,为后续处理做准备
df #打印
结果:
2. 一些查看表格的基本信息的方法:
- dataframe有宽表转长表的方法,可以更好的展现数据维度与组合
df.melt()#宽数据转长数据
结果:
df.melt(id_vars=["姓名","年龄","体重","性别","身高"]) # 转长数据应用场景
结果:
上面是一些pandas的dataframe的一些基础属性,日常数据处理需要一些对数据的处理,下面开始对表格进行基础操作
- 筛选数据
df[ df.性别 == "男" ]#筛选性别为男的数据
结果:
上面的数据筛选出我们需要的男性数据,但是可以看到索引还是之前的索引,可能不是我们希望展示的,所以需要重制索引
df2 = df[ df.性别 == "男" ] #df2为男性数据
df2.index = range(len(df2)) #重制索引
df2
结果:
- 根据条件添加列数据
在处理表格时,会有根据某列的数据,新增一列新的数据,这时候可能就会需要用到判断或计算式
df['小,初,高'] = df.apply(lambda x: '小学' if x.年级 < 7 else '初中' if 6 <x.年级 < 10 else '高中', axis=1) #根据年级判断新增列,内容为小学,初中,高中
df
结果:
- 根据某列值修改其他列
df['学费']=0 #增加一列学费 默认0
df.loc[df['小,初,高'] == '小学', '学费'] = 100 #根据条件修改数据
df.loc[df['小,初,高'] == '初中', '学费'] = 200 #根据条件修改数据
df.loc[df['小,初,高'] == '高中', '学费'] = 300 #根据条件修改数据
df
结果:
- 分组查看
表格处理中肯定会有希望通过某一维度聚合查看其他类型数据,这就用到了分组
df.groupby(['年级','班级','姓名']).mean() # 对年级,班级,姓名分组查看
结果:
- 绘图
pandas处理数据的能力是毋庸置疑的,但是他更加强大是因为它还可以绘图,可以根据你的数据绘制出你想要的图表,可以更直观的分析数据
可以直接使用df.plot()进行绘图,但是表格数据内有中文,绘图时会做警告,并且展示不了中文,所以需要多一个引用
import matplotlib.pyplot as plt
因为pandas的plot调用的matplotlib绘图,通过plt设置文字编码即可。
import matplotlib.pyplot as plt #引入
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] #设置文字编码,这是mac的文字,win可以使用['SimHei']
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
df3 = df.groupby(['年级','班级','姓名']).mean() # 对年级,班级,姓名分组 赋值df3
df3.rename(columns={
'年龄':'age'},inplace=True) #更换列名,不改编码也可以改为英文
df3.plot()
结果: