Python玩转EXCEL十大分析操作!(附源数据)

作者:Keivan Chan

来源:97年陈伯伯

前言:

EXCEL是日常办公最常用的软件,然而遇到数据量特别大(超过10W条)或者需要很复杂的公式时就显得没那么方便了(卡卡卡),所以还是那句话,“Life is short, you need Python”,下面就总结一些python替代EXCEL的常用操作,方便大家学习。

本例数据集采用网上公开的数据源,某地森林大火数据,共有13个特征,X和Y代表地理位置,month代表月份,day代表星期几,FFMC代表细小可燃物湿度码,DMC代表粗腐殖质湿度码,DC代表干旱码,ISI代表初始蔓延指数,temp代表温度,RH代表相对湿度,wind代表风速,rain代表降雨量,area代表地区。

若有兴趣的同学可以从我的网盘获取数据源:

链接: https://pan.baidu.com/s/1hlTB-OCIrvokfwgWFxlSNA 提取码: kcdc

目录:

1、导入数据源

2、数据基本操作

3、描述性统计
4、缺失值处理

5、筛选

6、替换

7、排序

8、关联

9、聚合

10、数据透视表pd.pivot_table()

一、导入数据源

#导入相关库
import  pandas as pd
import numpy as np 
import os 
from pandas import DataFrame,Series
import re
df =pd.read_csv(r'E:\work\daima\python\forestfires.csv') #打开文件

导入数据的方式有很多种,我们这里只介绍其中一种;

二、数据基本处理
1)查看列名和数据类型

print(df.columns)  #查看列名
print(df.dtypes)    #查看各列数据类型

2)查看指定行列数据

print(df.head(20)) #查看前20行数据
df=df.loc[:,'FFMC':'rain']     #选择FFMC到rain列所有数据

3)删除行或列

df=df.drop(['wind', 'rain', 'area'],axis=1)           #删除wind,rain和area三列
df_an=df_an.loc[-(df_an['qudao']=='Total')]  #删除qudao列等于'Total'的行

4)移除重复数据

df_new=df.drop_duplicates(['month','day'])  #移除month和day列包含重复值得行,保留第一个
df_new=df.drop_duplicates(['month'],take_last=True )#移除month列包含重复值得行,保留最后一个

5)更改列名

df.rename(columns={'ISI':'isi'}, inplace = True) #ISI列列名改为isi

三、描述性统计
1)计算某列变量频数

print(df['month'].unique())     #输出month列唯一值
print(df['month'].value_counts())   #输出month列各变量出现频数

2)分段统计

bins=[0,10,20,30,40,50,60,70,80,90,100]
group_names=['0-10','10-20','20-30','30-40','40-50','50-60','60-70','70-80','80-90','90-100']
cats=pd.cut(df['RH'],bins,labels=group_names)
pd.value_counts(cats,sort=False)

3)添加一列分组列,做多维频数统计

bins=[0,10,20,30,40,50,60,70,80,90,100]
group_names=['0-10','10-20','20-30','30-40','40-50','50-60','60-70','70-80','80-90','90-100']
cats=pd.cut(df['RH'],bins,labels=group_names)
df_concat=pd.concat([df,cats],axis=1,ignore_index=True)
df_group=df_concat[7].groupby([df_concat[0],df_concat[6],df_concat[7]])
df_fum=df_group.agg('count')

四、缺失值处理

1、缺失值统计
1)显示有缺失值的行

df[df.isnull().values==True] #显示有缺失值的行

2)增加一列,显示每行的缺失值

df_na=(df.isnull()).sum(axis=1) #统计每行的缺失值
df=pd.concat([df,df_na],axis=1) #df和df_na横向拼接
df.rename(columns={0:'na_num'}, inplace = True) #更改列名
df=df.loc[df['na_num']<=5]#删去变量值大于5的行

2、填充缺失值
1)删除含有缺失值的行(或者全为NA的行)

df.dropna()#删除含有缺失值的行
df.dropna(how='all')#只丢弃全为NA的那些行

2)填充固定值

train_data.fillna(0, inplace=True) # 填充 0

3)填充均值

df['DC'].fillna(df['DC'].mean(),inplace=True) # 填充均值

4)填充中位数

df['DC'].fillna(df['DC'].median(),inplace=True) #DC列缺失值填充为DC列的中位数

5)填充上下条的数据

df['DC'].fillna(method='pad', inplace=True) 
df['DC'].fillna(0, inplace=True)# 前一条没值就填充0
df['DC'].fillna(method='bfill', inplace=True) 
df['DC'].fillna(0, inplace=True)# 后一条没值就填充0

五、筛选
1)条件筛选loc

df_sel=df.loc[(df['month']=='aug') & (df['DC']>=600)] #筛选month列等于aug且DC列大于600的所有行

2)筛选并给新列赋值
这个多用于区间匹配,例如如果A列(0,100],C列为50;A列大于100 ,C列为A列的值

df.loc[(df['DC']>0) & (df['DC']<=100) ,'DC_na']=50 # 创建新列DC_na,DC列大于0且小于等于100,DC列为50
df.loc[df['DC']>100,'DC_na']=df['DC']# 创建新列DC_na,DC列大于100等于原值,其他为NA

六、替换
1)去掉字符串两端空格

df_city['experience_new'] = df_city['experience'].map(lambda s: s.strip())#experience列中文前后端包含空格,需对改列进行分词处理(去掉空格),赋值给新列experience_new

2)替换

#将experience_new列中的应届毕业生替换为1年以下
df_city = df_city.replace({'experience_new':'应届毕业生'},'1年以下')
df_city['expreienct_new']=df_city['expreienct_new'].map(lambda s:re.sub('应届毕业生','1年以下',s))

七、排序
按照DMC列降序,DC列升序对数据集进行排序

df_paixu=df.sort_values(by=['DMC','DC'],ascending=[0,1])

八、关联

1)左关联、右关联

df_merge=pd.merge(df1,df2,on='customer_id',how='left') #左关联
print(df_merge)

2、多表进行关联
1)轴向连接:concat()

pd.concat([df1,df2],axis=1,ignore_index=True)#df1和df2横向拼接

2)多表关联:reduce()

from functools import reduce
df_list=[df_dau,df_gmv_zx,df_dau_zx]
df_zhengti=reduce(lambda left,right:pd.merge(left,right,on=['event_date','duan'],how='left'),df_list) #按照event_date,duan 从左到右对df_list中的文件进行左关联

九、聚合

聚合groupby()

df_group=df['DC'].groupby([df['month'],df['day']]) #根据month和day列对DC列进行聚合
df_fun=df_gorup.agg(['sum','mean','std']) #对df_group求和,均值和标准差
print(df_fun)

十、数据透视表pd.pivot_table()

这个函数比较难记,可以参考EXCEL数据透视表去理解,index代表列,columns代表行,values代表值,aggfunc代表要对值用什么函数,fil_value代表缺失值用0填充;

df_toushi=pd.pivot_table(df,index=['month'],columns=['day'],
values=['DC'],aggfunc=[np.sum,np.mean],fill_value=0)
print(df_toushi)

◆ ◆ ◆  ◆ ◆

麟哥新书已经在京东上架了,厉害了!麟哥新书登顶京东销量排行榜!,目前京东正在举行活动,大家可以用原价5折的预购价格购买,3天左右会发货,还是非常划算的

点击下方小程序即可进入购买页面:


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:

猜你喜欢

 麟哥拼了!!!亲自出镜推荐自己新书《数据分析师求职面试指南》

 厉害了!麟哥新书登顶京东销量排行榜!

 笑死人不偿命的知乎沙雕问题排行榜

 用Python扒出B站那些“惊为天人”的阿婆主!

 你相信逛B站也能学编程吗

点击阅读原文即可参与京东5折购书活动

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值