只会用 Excel 还不够!七大主题,教你如何用 Python 优化数据分析效能

十年前,你说你是做数据的,大家的反应就是:用 Excel 做图表。

现在,想成为一个合格的数据分析师,你说你不会 Python,大概只会被耻笑。

做数据分析,就要学会用 Python 处理数据

在 Excel 成为我的「初恋」十年之后,是时候找一个更好的「另一半」了,在这个技术日新月异的时代,更好更薄更轻更快处理数据的选择就在身边!我希望用 Python 取代几乎所有的 Excel 功能,无论是简单的筛选还是相对复杂的建立并分析数据和数组。

我将展示从简单到复杂的计算任务。强烈建议你跟着我一起做这些步骤,以便更好地理解它们。

拟写此文的灵感,来自于人人可访问的免费教程网站,我曾认真閲读并一直严格遵守这篇 Python 文档,连结如下,相信你也会从该网站中找到很多干货。

一、将 Excel 文件导入 Panda DataFrame

初始步骤是将 Excel 文件导入 DataFrame,以便我们执行所有任务。我将演示支持 xls 和 xlsx 文件扩展名的 Pandas 的 read_excel 方法。read_csv 与 read_excel 相同,就不做深入讨论了,但我会分享一个例子。

尽管 read_excel 方法包含数百万个参数,但我们只讨论那些在日常操作中最常见的那些。

我们使用 Iris 样本数据集,出于教育目的,该数据集可在线免费使用。

请按照 以下链接 下载数据,并将其放在与储存 Python 文件的同一文件夹中。

1、第一步是在 Python 中导入库

import pandas as pd
Import numpy as np

2、一些重要的 Pandas read_excel 选项

[站外图片上传中...(image-159f12-1620129412411)]
如果默认使用本地文件的路径,用「\」表示,接受用「/」表示,更改斜槓可以将文件添加到 Python 文件所在的文件夹中。

用 Python 扫瞄目录中的文件并选择想要的:

wkbks =glob(os path. join(os pardi, input, xlsx_files all, Ir* x1s))sorted(wkbks)

filename -Iris.xlsx
df -pd. read excel(filename)
print(df)

3、导入表格

默认情况下,文件中的第一个工作表将按原样导入到数据框中。

使用 sheet_name 参数,可以明确要导入的工作表。文件中的第一个表默认值为 0。可以用工作表的名字,或一个整数值来当作工作表的 index。

df1 pd read excel(filename, sheet name-sheet2")
print(df1)

4、使用工作表中的列作为索引

除非明确提到,否则索引列会添加到 DataFrame 中,默认情况下从 0 开始。

使用 index_col 参数可以操作数据框中的索引列,如果将值 0 设置为 none,它将使用第一列作为 index。

df=pd. read excel(filename, sheet name-sheet1, index_col-0)
print(df)

5、略过行和列

默认的 read_excel 参数假定第一行是列表名称,会自动合併为 DataFrame 中的列标籤。使用 skiprows 和 header 之类的函数,我们可以操纵导入的 DataFrame 的行为。

df =pd. read excel(filename, sheet name-sheet1, header=None, skiprows-1, index col-0)
print(df)

6、导入特定列

使用 usecols 参数,可以指定是否在 DataFrame 中导入特定的列。

这只是个开始,并不是所有的功能,但已足够你「尝鲜」了。

df =pd.read excel(filename, sheet name="Sheet1, headerNone, skiprows-1, usecols=B, D)
print(df)
df=pd.read excel(filename)

二、查看的数据的属性

现在我们有了 DataFrame,可以从多个角度查看数据了。Pandas 有很多我们可以使用的功能,接下来将使用其中一些来看下我们的数据集。

1、从「头」到「脚」

查看第一行或最后五行。默认值为 5,也可以自定义参数。

df head(10)
df tail()

2、查看特定列的数据

df[ 'sepallength'].head ()

3、查看所有列的名字

df columns

4、查看资讯

查看 Dataframe的数据属性总结

df. info()

5、返回到 ataframe

df shapely]
print(Total rows in Dataframe is: df shape[))print(Total columns in Dataframe is: df sapele])

6、查看 Dataframe中的数据类型

df dtypes

三、分割:即 Excel 过滤器

描述性报告是关于数据子集和聚合的,当需要初步瞭解数据时,通常使用过滤器来查看较小的数据集或特定的列,以便更好的理解数据。

Python 提供了许多不同的方法来对 DataFrame 进行分割,我们将使用它们中的几个来瞭解它是如何工作的。

1、查看列

包括以下三种主要方法:

  1. 使用点符号:例如 data.column_name
  2. 使用方括弧和列名称:数据 [“COLUMN_NAME”]
  3. 使用数字索引和 iloc 选择器:data.loc [:,’column_number’]
df[Name I. head()
df iloc[,: [4]]. head()
df. loc[:, ['Name']. head()

2、查看多列

df[['name, Petallength 1). head()

Specificcolumnlist =['name, Petallength']
df[Specificcolumnlist].head()

3、查看特定行

这里使用的方法是 loc 函数,其中我们可以指定以冒号分隔的起始行和结束行。注意,索引从 0 开始而不是 1。

df.1oc[20:30]

4、同时分割行和列

df.1oc[29:39,['Name']

5、在某一列中筛选

df Idf[Name]== Iris-versicolor. head()

6、筛选多种数值

df [df[Name]. isin(i'iris-versicolor", Iris-virginica 1)

7、用列表筛选多种数值

Filter Value=['iris-versicolor,Iris-virginica'i
df Idf[ Name .isin(Filter Value)]

8、筛选不在列表或 Excel中的值

df[odf[ Name].isin(Filter Value)]

9、用多个条件筛选多列数据

输入应为列一个表,此方法相当于 Excel中的高级过滤器功能

width =[2]
Flower Name=[Iris-setosa]
df[~df[Name].isin(Flower Name)& df["petalwidth'isin(width)]

10、根据数字条件过滤

dfidfi'sepallength']==5. 1]. head(
df Idf['sepallength]>5.1).head()

11、在 Excel中复制自定义的筛选器

df Idf[ Name map(lambda x: xendswith(sa ))

12、合併两个过滤器的计算结果

df Idf['name" map(lambda x: xendswith(sa))&(df[Sepallength>5.1)

13、包含 Excel中的功能

df Idf[Name].str contains('set )

14、从 Dataframe获取特定的值

df [ Sepallength]. unique()

如果想要用特定值查看整个 Dataframe,可以使用drop_ duplicates函数

df drop duplicates(subset=['name])
df drop duplicates(subset=['name]).iloc[: [3, 4])

15、排序

对特定列排序,默认升序

df sort values(by =['sepallength'j)
df sort values(by = ['sepallength], ascending False)

四、统计功能

1、描蓮性统计

描述性統计,总结数据集分佈的集中趋势,分款程度和正态分佈程度,不包括NaN值

dfdescribe ()

描述性统计总结

df describe(include =['object])
df describe(include ='all)

五、数据计算

1、计算某一特定列的值

输出结果是一个系列。称为单列数据透视表

pd value counts(df[Name"])

2、计数

统计每列或每行的非NA单元格的数量

df. count (axis=0)

3、求和

按行或列求和数据

df sum(axis =0) 

为每行添加总列

df sum(axis =1) i row wise sum

4、将总列添加到已存在的数据集

df[' Total'1=df sum(axis =1)
df head ()

5、特定列的总和,使用loc函数

df ['total loc]=df. loc[: ['sepallength,Sepalwidth]]. sum(axis=1)
df head ()

或者,我们可以用以下方法

df[' Total Dfsum']=df [ Sepallength'1+ df[' sepalwidth'j
df head()

6用drop函数删除行

df drop([ Total Dfsum', axis 1)

7、计算每列的总和

Sum Total df[['sepallength,Sepalwidth,Total]sum(
Sum Total
T Sum pd Dataframe(data=sum Total).T
I Sum
T Sum =T Sum reindex(columns=df columns)
T Sum
Row Total df append(T Sum, ignore index=True)
Row Total

以上,我们使用的方法包括
Sum_ Total:计算列的总和
T_Sum:将系列输出转換为 Dataframe併进行转置
Re- index:添加缺少的列
RoW_ Total:将T_Sum附加到现有的 Dataframe

8、多条件求和即 Excel中的 Sumif函数

df (df [' Name]==iris-versicolor. sum()

9、多条件求和

df [df ['name].map(lambda x: xendswith('sa))s(df['sepallength'1 >5

10、求算术平均值

df [df['name'j== 'iris-versicolor'1mean()

11求最大值

df(df[Name]=="iris-versicolor].max()

12、求最小值

df [df ['name] =="iris-versicolor']min()

13、Groupby:即 Excel 中的小计函数

df[['name','sepallength'1] groupby('name)sum()
Groupby df groupby('name)sum ()
GroupBy.append(pd.DataFrame(df["sepalLength',sepawidth',"Petarength',"Petalwidth]].sum()).T)

六、DataFrame 中的枢纽分析表功能

谁会不喜欢 Excel 中的枢纽分析表呢?它是分析数据的最佳方式,可以快速浏览资讯,使用超级简单的界面分割数据,绘制图表,添加计算列等。

现在没有了工作界面,必须用编写程式码的方式来输出结果,且没有生成图表功能,但需要我们充分理解枢纽分析表的精华。

pd pivot table(df, index=" Name)+Same as Groupby
pd pivot table(df, values=' Sepalwidth, index=Sepallength, columns=Name, aggfunc = np sum)

简单的数据透视表,显示 SepalWidth 的总和,行列中的 SepalLength 和列标籤中的名称。

现在让我们试着复杂化一些:

pd pivot table(df, values=Sepalwidth, index=Sepallength,columns="Name, aggfunc= np sum, fill value=0)

fill_value 参数将空白替换为 0:

pd pivot table(df, values=[ Sepalwidth, Petalwidth'], index= Sepallength, columns=Name, aggfunc = np sum
fill value=0)
pd pivot table (df, values=['sepalwidthpetalwidth', index=[Sepallength, Petallength'], columns='name,
aggfunc np sum, fill value=0)
d pivot table(df, values=[Sepalwidth, 'petalwidth'], index=' Sepallength', columns='name"
aggfunc = ('sepalwidth: np sum, 'petalwidth': np.mean), fill value=0)

可以使用 dictionary函数进行单独计算,也可以多次计算值

d pivot table(df, values=['sepalwidth'petalwidth'], index=Sepallength, columns=Name"
aggfunc =('sepalwidth: np sum, Petalwidth': np. mean), fill value=0, margins=True)

七、Vlookup 函数
Excel 中的 vlookup 是一个神奇的功能,是每个人在学习如何求和之前就想要学习的。会用 vlookup 是很迷人的,因为输出结果时像变魔术一样。可以非常自信地说它是电子表格上计算的每个数据的支柱。

不幸的是,Pandas 中并没有 vlookup 功能!

由于 Pandas 中没有 Vlookup 函数,因此 Merge 用与 SQL 相同的备用函数。有四种合併选项:

left:使用左侧 DataFrame 中的共享列并匹配右侧 DataFrame,N/A 为 NaN。
right:使用右侧 DataFrame 中的共享列并匹配左侧 DataFrame,N/A 为 NaN。
inner:仅显示两个共享列重叠的数据。默认方法。
outer:当左侧或右侧 DataFrame 中存在匹配时,返回所有记录。

dfl pd read excel(filename)
lookup df merge(df, on='name)
lookup

以上可能不是解释这个概念的最好例子,但原理是一样的

整个教学到这里就结束啦,正如大家知道的那样,「没有完美的教学存在」,这位伙伴的教学肯定也是不完美的,但是大家可以自己动手试试・如果大家还知道有什么 Python可以替代 Exce的地方,欢迎留言讨论!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容