产品经理处理数据一般有两个阶段,能写SQL的有自助查询工具的就自己写SQL, 否则找BI拉数据。不管是自己取数还是别人取数一般都会导出一个Excel, 第二个阶段就是处理Excel了,通过各种公式和制图得到自己想要的分析结果,但是有了Python, 我们可以让第二个环节更加高效和强大,而且可以不断复用你的成果。可能你会说自己Excel应用的炉火纯青,能熟练应用数据透视和宏,还记得一百多个公式,那无非也就等于熟练掌握了冷兵器时代的蒙古弓。相对于Excel, 程式化处理具备的优势是自动化和线上化。相对于零散的公式和宏,集中的自然语言风格的代码易于解读易于理解易于复用和改造,具备良好的迁移性。Excel是靠人做线下处理,如果能切换到代码实现,就能无缝和线上系统整合,贯穿全流程批量处理更复杂的问题。
Python有一个强大的数据处理库叫Pandas用来分析结构化数据,在金融数据分析领域广泛应用。它已经集成到Anaconda中了,所以你都不用安装。Pandas既可以处理Excel也可以直接操作SQL, 这一课我们只用它来做一些基本的Excel操作。Pandas有两种数据结构,Series和DataFrame ,简单理解前者是一维数据,后者是二维数据,下面的实例中会用到DataFrame映射表结构。
首先我准备一个简单的Excel样本文件工资表。只模拟六行记录,每行几个简单字段,姓名,性别,年龄,收入,扣税。
把这个文件保存到文件夹,然后我们就可以开始来进行一系列简单的操作练习了。
为了节省你的时间这个文件我已经上传到github提供下载: 点击获取
导入Pandas
因为要用到Pandas这个库,所以我们先导入它,并给一个简单的别名pd
import pandas as pd
读取并打印记录
注意表格里我特意加了一条重复记录在第三行,当获取和打印记录的时候Pandas已经实现去重处理了,所以df.head()打印出来只有五条记录。
console#读取excel数据到一个data frame中
df = pd.read_excel("d:/dev/salary.xlsx")#获取头部5条记录
print(df.head())
print("----------")
#获取头部两条记录
print(df.head(2))
print("----------")
#获取尾部三条记录
print(df.tail(3))
查看记录条数
consoleprint("number of rows: ", len(df))
基本统计
针对收入这一列求和,求平均数,取最小最大值,求方差和偏差也很简单,用std()和var()函数即可
consoleprint("income sum ", df["income"].sum())
print("income average ", df["income"].mean())
print("income minmal ", df["income"].min())
print("income max ", df["income"].max())
增加列
假入想要看看每个人的税后收入就要用income减去tax, 最好能加多一列,Pandas也能简单实现,添加完后可以重新打印全部记录看看
consoledf['after tax'] = df['income'] - df['tax']
print(df.head())
删除列
df.drop(['after tax'], axis = 1, inplace = True)
分组求和
假如我们想按照性别分组统计男性和女性的收入之和
consolegender_grouped = df.groupby("gender")
income_sum_groupby_gender = gender_grouped[['income']].sum(axis=1)
print(income_sum_groupby_gender)
切片
假如我想仅查看男性人员记录,且只要名字和税收两个字段(横切一刀,竖切一刀)
loc函数就相当于SQL中的where
consoleslice = df.loc[df['gender']== 'male',['name', 'tax']]
print(slice)
保存文件
上面代码略加修改,分别对男性和女性人员进行切片,再创建两个worksheet写入Excel保存
male_slice = df.loc[df['gender']== 'male',['name', 'tax']]
female_slice = df.loc[df['gender']== 'female',['name', 'tax']]writer = pd.ExcelWriter("d:/dev/tax.xlsx")
male_slice.to_excel(writer, 'male')
female_slice.to_excel(writer, 'female')
writer.save()
基本操作就先写这么多,还有连接,合并, 转置,画图等高级操作,可以参考下面的两张cheatsheet自己尝试练习。
下一次我们将结合一个实际的数据分析案例使用这里学到的知识来进行操作演示。
网友评论