当前位置: 首页 > news >正文

8个Python高效数据分析的技巧

导读:今天给大家分享一篇内容,介绍了8个使用Python进行数据分析的方法,不仅能够提升运行效率,还能够使代码更加“优美”。

一行代码定义List

定义某种列表时,写For 循环过于麻烦,幸运的是,Python有一种内置的方法可以在一行代码中解决这个问题。下面是使用For循环创建列表和用一行代码创建列表的对比。

x = [1,2,3,4]
out = []
for item in x:
  out.append(item**2)
print(out)

[1, 4, 9, 16]

# vs.

x = [1,2,3,4]
out = [item**2 for item in x]
print(out)

[1, 4, 9, 16]

Lambda表达式

厌倦了定义用不了几次的函数?Lambda表达式是你的救星!Lambda表达式用于在Python中创建小型,一次性和匿名函数对象, 它能替你创建一个函数。

lambda表达式的基本语法是:

lambda arguments: expression

lambda arguments: expression

注意!只要有一个lambda表达式,就可以完成常规函数可以执行的任何操作。

你可以从下面的例子中,感受lambda表达式的强大功能:

double = lambda x: x * 2
print(double(5))

10

Map和Filter

一旦掌握了lambda表达式,学习将它们与Map和Filter函数配合使用,可以实现更为强大的功能。具体来说,map通过对列表中每个元素执行某种操作并将其转换为新列表。

在本例中,它遍历每个元素并乘以2,构成新列表。 (注意!list()函数只是将输出转换为列表类型)

# Map
seq = [1, 2, 3, 4, 5]
result = list(map(lambda var: var*2, seq))
print(result)

[2, 4, 6, 8, 10]

Filter函数接受一个列表和一条规则,就像map一样,但它通过比较每个元素和布尔过滤规则来返回原始列表的一个子集。

# Filter
seq = [1, 2, 3, 4, 5]
result = list(filter(lambda x: x > 2, seq))
print(result)

[3, 4, 5]

Arange和Linspace

Arange返回给定步长的等差列表。它的三个参数start、stop、step分别表示起始值,结束值和步长, 请注意!stop点是一个“截止”值,因此它不会包含在数组输出中。

# np.arange(start, stop, step)
np.arange(3, 7, 2)

array([3, 5])

Linspace和Arrange非常相似,但略有不同。Linspace以指定数目均匀分割区间,所以给定区间start和end,以及等分分割点数目num,linspace将返回一个NumPy数组。 
这对绘图时数据可视化和声明坐标轴特别有用。

# np.linspace(start, stop, num)
np.linspace(2.0, 3.0, num=5)

array([ 2.0,  2.25,  2.5,  2.75, 3.0]

Axis代表什么?

在Pandas中,删除一列或在NumPy矩阵中求和值时,可能会遇到Axis。我们用删除一列(行)的例子:

df.drop('Column A', axis=1)
df.drop('Row A', axis=0)

如果你想处理列,将Axis设置为1,如果你想要处理行,将其设置为0。但为什么呢? 回想一下Pandas中的shape。

df.shape
(# of Rows, # of Columns)

从Pandas DataFrame中调用shape属性返回一个元组,第一个值代表行数,第二个值代表列数。


如果你想在Python中对其进行索引,则行数下标为0,列数下标为1,这很像我们如何声明轴值。

Concat、Merge和Join

如果您熟悉SQL,那么这些概念对你来说可能会更容易。 无论如何,这些函数本质上就是以特定方式组合DataFrame的方式。 在哪个时间跟踪哪一个最适合使用可能很困难,所以让我们回顾一下。
Concat允许用户在表格下面或旁边追加一个或多个DataFrame(取决于您如何定义轴)。

Merge将多个DataFrame合并指定主键(Key)相同的行。

Join,和Merge一样,合并了两个DataFrame。但它不按某个指定的主键合并,而是根据相同的列名或行名合并。

Pandas Apply

Apply是为Pandas Series而设计的。如果你不太熟悉Series,可以将它想成类似Numpy的数组。

Apply将一个函数应用于指定轴上的每一个元素。使用Apply,可以将DataFrame列(是一个Series)的值进行格式设置和操作,不用循环,非常有用!

df = pd.DataFrame([[4, 9],] * 3, columns=['A', 'B'])
 df
   A  B
0  4  9
1  4  9
2  4  9

df.apply(np.sqrt)
     A    B
0  2.0  3.0
1  2.0  3.0
2  2.0  3.0

df.apply(np.sum, axis=0)
A    12
B    27

df.apply(np.sum, axis=1)
0    13
1    13
2    13

Pivot Tables

如果您熟悉Microsoft Excel,那么你也许听说过数据透视表。 
Pandas内置的pivot_table函数以DataFrame的形式创建电子表格样式的数据透视表,,它可以帮助我们快速查看某几列的数据。 
下面是几个例子:
非常智能地将数据按照“Manager”分了组:

pd.pivot_table(df, index=["Manager", "Rep"])

或者也可以筛选属性值

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"])

希望上面的这些描述能够让你发现Python一些好用的函数和概念。

RECOMMEND

推荐阅读

01

《利用Python进行数据分析(原书第2版)》

推荐理由

本书由Python pandas项目创始人Wes McKinney亲笔撰写,详细介绍利用Python进行操作、处理、清洗和规整数据等方面的具体细节和基本要点。第2版针对Python 3.6进行全面修订和更新,涵盖新版的pandas、NumPy、IPython和Jupyter,并增加大量实际案例,可以帮助你高效解决一系列数据分析问题。

02

《Python数据分析与数据化运营(第2版)》

推荐理由

这是一本将数据分析技术与数据使用场景深度结合的著作,从实战角度讲解了如何利用Python进行数据分析和数据化运营。

畅销书全新、大幅升级,第1版近乎100%的好评,第2版不仅将Python升级到了新的版本,而且对具体内容进行了大幅度的补充和优化。作者是有10余年数据分析与数据化运营的资深大数据专家,书中对50余个数据工作流知识点、14个数据分析与挖掘主题、4个数据化运营主题、8个综合性案例进行了全面的讲解,能让数据化运营结合数据使用场景360°落地。

03

《Python数据分析与挖掘实战(第2版)》

推荐理由

本书是Python数据分析与挖掘领域的公认的事实标准,第1版销售超过10万册,销售势头依然强劲,被国内100余所高等院校采用为教材,同时也被广大数据科学工作者奉为经典。

作者在大数据挖掘与分析等领域有10余年的工程实践、教学和创办企业的经验,不仅掌握行业的新技术和实践方法,而且洞悉学生和老师的需求与痛点,这为本书的内容和形式提供了强有力的保障,这是本书第1版能大获成功的关键因素。

更多精彩回顾

书讯 | 12月书讯 | 年末上新,好书不断

资讯 | DB-Engines 12月数据库排名:PostgreSQL有望获得「2020年度数据库」荣誉?

书单 | 机器人时代已来!推荐几本机器人学硬核好书

干货 | 基于中台架构的新业务建设原则

收藏 | 为什么Siri总是像个智障?智能助手背后的技术到底有多难?

上新 | 尴尬的游戏用户体验设计师

赠书 | 【第34期】如何成为一个软件架构师?

相关文章:

  • 为什么“蜥蜴书”是机器学习入门必读书?
  • 互联网消费金融行业从业者的实战指南
  • 中台的本质及中台建设的4点思考
  • 复杂的密码学也可以人人可懂
  • Python循环语句代码逐行详解:while、for、break和continue
  • 基于Vite搭建Electron+Vue3的开发环境
  • 国产首款——飞桨PaddlePaddle深度学习框架介绍
  • “MySQL Analytics Engine”来了
  • 【第35期】数字化转型到底该怎么做?
  • 详解华为12种数据采集技术及应用实践
  • JavaScript 25 岁了!
  • 43种机器学习开源数据集(附地址/调用方法)
  • 中国量子计算原型机“九章”问世,普通人怎样初识量子计算?
  • 中台“不火”了,企业数智转型如何破圈?
  • 一本书读懂“财税RPA”
  • 03Go 类型总结
  • Apache的80端口被占用以及访问时报错403
  • Codepen 每日精选(2018-3-25)
  • CSS实用技巧干货
  • Java 网络编程(2):UDP 的使用
  • learning koa2.x
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 番外篇1:在Windows环境下安装JDK
  • 排序算法之--选择排序
  • 我这样减少了26.5M Java内存!
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 组复制官方翻译九、Group Replication Technical Details
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • (C++17) std算法之执行策略 execution
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (Forward) Music Player: From UI Proposal to Code
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (六)软件测试分工
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)Linq学习笔记
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net 中Partitioner static与dynamic的性能对比
  • .net网站发布-允许更新此预编译站点
  • @Controller和@RestController的区别?
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [C#]猫叫人醒老鼠跑 C#的委托及事件
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入HBASE
  • [hdu 1247]Hat’s Words [Trie 图]
  • [hdu 3746] Cyclic Nacklace [kmp]
  • [IE编程] IE8 新增的C++开发接口
  • [Invalid postback or callback argument]昨晚调试程序时出现的问题,MARK一下
  • [Java] 什么是IoC?什么是DI?它们的区别是什么?
  • [Java]快速入门二叉树,手撕相关面试题
  • [javaSE] 看知乎学习工厂模式
  • [MTK]安卓8 ADB执行ota升级
  • [svc]caffe安装笔记
  • [UI5 常用控件] 01.Text