对比excel轻松学python_对比excel,轻松学习python数据分析

一直想把excel和python关联起来,加深学习pandas的印象,正好在知乎上找到@天天 提到的的《对比excel,轻松学习python数据分析》这本书,紧接着又搜到了苏克1900:像 Excel 一样使用 python 进行数据分析 这篇专栏文章,文章写得很全,遂在jupyte notebook上重写了一遍里面的代码,以供对照学习。按照书中目录,总共分为如下部分:

一、生成数据表

import numpy as np

import pandas as pd

# 创建数据表

df = pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006],

"date":pd.date_range('20130102', periods=6),

"city":['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],

"age":[23,44,54,32,34,32],

"category":['100-A','100-B','110-A','110-C','210-A','130-F'],

"price":[1200,np.nan,2133,5433,np.nan,4432]},

columns =['id','date','city','category','age','price'])

df #打印结果

iddatecitycategoryageprice

010012013-01-02Beijing100-A231200.0

110022013-01-03SH100-B44NaN

210032013-01-04guangzhou110-A542133.0

310042013-01-05Shenzhen110-C325433.0

410052013-01-06shanghai210-A34NaN

510062013-01-07BEIJING130-F324432.0

二、数据表检查

#查看数据表的维度,对应excel CTRL+向下 CTRL+向右

df.shape

(6, 6)

# 数据表信息

df.info()

# 查看数据格式,Excel中通过选中单元格并查看开始菜单中的数值类型来判断数据的格式

df.dtypes

# 查看空值,对应excel CTRL+G定位空值

df.isnull()

# 查看唯一值,Excel 中查看唯一值的方法是使用“条件格式”对唯一值进行颜色标记

df['city'].unique()

# 查看数据表数值

df.values

# 查看列名称

df.columns

# 查看前10行数据

df.head(10)

# 查看后10行数据

df.tail(10)

三、数据表清洗

# 处理空值(删除或填充),对应excel查找和替换——删除数据表中含有空值的行

df.dropna(how="any")

#使用数字 0 填充数据表中空值

df.fillna(value=0)

#使用均值填充数据表中空值

df['price']=df['price'].fillna(df['price'].mean())

# 清理空格,清除city 字段中的字符空格

df['city']=df['city'].map(str.strip)

# 大小写转换

df['city']=df['city'].str.lower()

# 更改数据格式,Excel 中通过“设置单元格格式”功能可以修改数据格式

df['price'].astype('int')

# 更改列名称

df.rename(columns={'category': 'category-size'})

# 删除重复值,Excel 的数据目录下有“删除重复项”的功能

df['city'].drop_duplicates()

df['city'].drop_duplicates(keep='last')#保留最后一个重复值

# 数值修改及替换,Excel 中使用“查找和替换”功能就可以实现数值的替换

df['city'].replace('sh','shanghai')

四、数据预处理

# 数据表合并

#先创建 df1 数据表

df1=pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006,1007,1008],

"gender":['male','female','male','female','male','female','male','female'],

"pay":['Y','N','Y','Y','N','Y','N','Y',],

"m-point":[10,12,20,40,40,40,30,20]})

#数据表匹配合并,inner 模式, 在 Excel 中没有直接完成数据表合并的功能,可以通过 VLOOKUP 函数分步实现

df_inner=pd.merge(df,df1,how="inner")

df_inner

#其他数据表匹配模式

df_left=pd.merge(df,df1,how='left')

df_right=pd.merge(df,df1,how='right')

df_outer=pd.merge(df,df1,how='outer')

df_outer

# 设置索引列

df_inner.set_index('id')

# 排序(按索引,按数值),Excel 中可以通过数据目录下的排序按钮直接对数据表进行排序

df_inner.sort_index()

df_inner.sort_values(by=['age']) #按列排序需要增加by 参数

# 数据分组,Excel 中可以通过 VLOOKUP 函数进行近似匹配来完成对数值的分组,或者使用“数据透视表”来完成分组

df_inner['group']=np.where(df_inner['price']>3000,'high','low')#有点类似excel的if函数

df_inner

#对复合多个条件的数据进行分组标记

df_inner.loc[(df['city']=='beijing')&(df['price']>4000),'sigh']=1

df_inner

# 数据分列 Excel 中的数据目录下提供“分列”功能

#对 category 字段的值依次进行分列,并创建数据表,索引值为 df_inner 的索引列,列名称为 category 和 size

split=pd.DataFrame((x.split('-') for x in df['category']),index=df_inner.index,columns=['category','size'])

#将完成分列后的数据表与原 df_inner 数据表进行匹配

pd.merge(df_inner,split,right_index=True,left_index=True) #right_index和left_index相当于唯一字段

五、数据提取

# 按标签提取(loc), Loc 函数按数据表的索引标签进行提取,iloc,ix现在用的少,暂时不提及

# 按索引标签提取单行的数值

df_inner.loc[3]

#按索引提取区域行数值

df_inner.loc[0:5]

#重设索引

df_inner.reset_index()

#设置日期为索引

df_inner.set_index('date')

# 提取 4 日之前的所有数据

df_inner.loc[:"2013-01-04"]

# 按条件提取(区域和条件值),使用 isin 函数对 city 中的值是否为 beijing 进行判断。

df_inner['city'].isin(['beijing'])#返回布尔值

df_inner.loc[df_inner['city'].isin(['beijing'])]#返回布尔值为True的值

# 数值提取还可以完成类似数据分列的工作,从合并的数值中提取出制定的数值。

category=df_inner['category']

pd.DataFrame(category.str[:3]) #提取前三个字符,并生成数据表

六、数据筛选

# 使用与,或,非三个条件配合大于,小于和等于对数据进行筛选,并进行计数和求和。与 excel 中的筛选功能和 countifs 和 sumifs 功能相似

# 按条件筛选(与&,或|,非!=),Excel 数据目录下提供了“筛选”功能,用于对数据表按不同的条件进行筛选。

# 使用“与”条件进行筛选,条件是年龄大于 25 岁,并且城市为 beijing

df_inner.loc[(df_inner['age']>25)&(df_inner['city']=='beijing')]

# 使用“或”条件进行筛选,年龄大于 25 岁或城市为 beijing。筛选后有 6 条数据符合要求。

df_inner.loc[(df_inner['age']>25) | (df_inner['city']=='beijing')]

#使用“非”条件进行筛选,城市不等于 beijing。将筛选结果按 id 列进行排序(sort函数只能对列表使用,报错)

df_inner.loc[(df_inner['age'] > 25) | (df_inner['city'] != 'beijing'), ['id','city','age','category','gender']].sort_values(by=['age'])

# 在前面的代码后增加 price 字段以及 sum 函数,按筛选后的结果将 price 字段值进行求和,相当于 excel 中 sumifs 的功能。

df_inner.loc[(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'),['id','city','age','category','gender','price']].sort_values(by=['age']).price.sum()

# 还有一种筛选的方式是用 query 函数

df_inner.query('city==["beijing","shanghai"]')#单引号里面要用双引号,否则会报错

#对筛选后的结果按 price 进行求和

df_inner.query('city==["beijing","shanghai"]').price.sum()

七、数据汇总

# Excel 中使用分类汇总和数据透视可以按特定维度对数据进行汇总,python 中使用的主要函数是 groupby 和 pivot_table

# 分类汇总,对所有列进行计数汇总

df_inner.groupby('city').count()

pd.crosstab(df_inner['city'],df_inner['age'])#使用crosstab可以实现单列计数汇总

# 对特定的 ID 列进行计数汇总

df_inner.groupby('city')['id'].count()

#对两个字段进行汇总计数

df_inner.groupby(['city','size'])['id'].count()

# 除了计数和求和外,还可以对汇总后的数据同时按多个维度进行计算 /按城市对 price 字段进行汇总,并分别计算 price 的数量,总金额和平均金额

df_inner.groupby('city')['price'].agg([len,np.sum,np.mean])#len这里代表的是列表中的项目个数,非字符串的长度

# 数据透视,Excel 中的插入目录下提供“数据透视表”功能对数据表按特定维度进行汇总

# 设定 city 为行字段,size 为列字段,price 为值字段。分别计算 price 的数量和金额并且按行与列进行汇总。

pd.pivot_table(df_inner,index=['city'],columns=['size'],values=['price'],aggfunc=[len,np.sum],fill_value=0,margins=True)#margins相当于行列汇总

八、数据统计

# 主要介绍数据采样,标准差,协方差和相关系数的使用方法

# 数据采样,Excel的数据分析功能中提供了数据抽样的功能,Python 通过 sample 函数完成数据采样

#简单的数据采样

df_inner.sample(n=3)

#手动设置采样权重

weights=[0,0,0,0,0.5,0.5]

df_inner.sample(n=2,weights=weights)

# Sample 函数中还有一个参数 replace,用来设置采样后是否放回

#采样后不放回

df_inner.sample(n=6, replace=False)

#采样后放回,'replace'就是重复的意思。即可以重复对元素进行抽样,也就是所谓的有放回抽样

df_inner.sample(n=6, replace=True)

# 描述统计,Excel 中的数据分析中提供了描述统计的功能。Python 中可以通过 Describe 对数据进行描述统计

df_inner.describe()

#数据表描述性统计

df_inner.describe().round(2).T #round设置小数点后位数,T代表转置

# 标准差 Python 中的 Std 函数用来接算特定数据列的标准差

df_inner['price'].std()

# 协方差,python 中通过 cov 函数计算两个字段或数据表中各字段间的协方差

df_inner['price'].cov(df_inner['m-point'])

# 相关分析,python 中通过 corr 函数完成相关分析的操作,并返回相关系数

df_inner['price'].corr(df_inner['m-point'])

#数据表相关性分析

df_inner.corr()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值