6个冷门但实用的pandas知识点

简介: 6个冷门但实用的pandas知识点

1 简介

pandas作为开展数据分析的利器,蕴含了与数据处理相关的丰富多样的API,使得我们可以灵活方便地对数据进行各种加工,但很多pandas中的实用方法其实大部分人都是不知道的,今天就来给大家介绍6个不太为人们所所熟知的实用pandas小技巧。

图1

2 6个实用的pandas小知识

2.1 Series与DataFrame的互转

很多时候我们计算过程中产生的结果是Series格式的,而接下来的很多操作尤其是使用「链式」语法时,需要衔接着传入DataFrame格式的变量,这种时候我们就可以使用到pandasSeriesDataFrame转换的方法:

  • 「利用to_frame()实现Series转DataFrame」
s = pd.Series([0, 1, 2])
# Series转为DataFrame,name参数用于指定转换后的字段名
s = s.to_frame(name='列名')
s

图2

顺便介绍一下单列数据组成的数据框转为Series的方法:

  • 「利用squeeze()实现单列数据DataFrame转Series」
# 只有单列数据的DataFrame转为Series
s.squeeze()

图3

2.2 随机打乱DataFrame的记录行顺序

有时候我们需要对数据框整体的行顺序进行打乱,譬如在训练机器学习模型时,打乱原始数据顺序后取前若干行作为训练集后若干行作为测试集,这在pandas中可以利用sample()方法快捷实现。

sample()方法的本质功能是从原始数据中抽样行记录,默认为不放回抽样,其参数frac用于控制抽样比例,我们将其设置为1则等价于打乱顺序:

df = pd.DataFrame({
    'V1': range(5),
    'V2': range(5)
})
df.sample(frac=1)

图4

2.3 利用类别型数据减少内存消耗

当我们的数据框中某些列是由少数几种值大量重复形成时,会消耗大量的内存,就像下面的例子一样:

import numpy as np
pool = ['A', 'B', 'C', 'D']
# V1列由ABCD大量重复形成
df = pd.DataFrame({
    'V1': np.random.choice(pool, 1000000)
})
# 查看内存使用情况
df.memory_usage(deep=True)

图5  

这种时候我们可以使用到pandas数据类型中的类别型来极大程度上减小内存消耗:

df['V1'] = df['V1'].astype('category')
df.memory_usage(deep=True)

图6  

可以看到,转换类型之后内存消耗减少了将近98.3%!

2.4 pandas中的object类型陷阱

在日常使用pandas处理数据的过程中,经常会遇到object这种数据类型,很多初学者都会把它视为字符串,事实上objectpandas中可以代表不确定的数据类型,即类型为objectSeries中可以混杂着多种数据类型:

s = pd.Series(['111100', '111100', 111100, '111100'])
s

图7

查看类型分布:

s.apply(lambda s: type(s))

图8

这种情况下,如果贸然当作字符串列来处理,对应的无法处理的元素只会变成缺失值而不报错,给我们的分析过程带来隐患:

s.str.replace('00', '11')

图9

这种时候就一定要先转成对应的类型,再执行相应的方法:

s.astype('str').str.replace('00', '11')

图10

2.5 快速判断每一列是否有缺失值

pandas中我们可以对单个Series查看hanans属性来了解其是否包含缺失值,而结合apply(),我们就可以快速查看整个数据框中哪些列含有缺失值:

df = pd.DataFrame({
    'V1': [1, 2, None, 4],
    'V2': [1, 2, 3, 4],
    'V3': [None, 1, 2, 3]
})
df.apply(lambda s: s.hasnans)

图11

2.6 使用rank()计算排名时的五种策略

pandas中我们可以利用rank()方法计算某一列数据对应的排名信息,但在rank()中有参数method来控制具体的结果计算策略,有以下5种策略,在具体使用的时候要根据需要灵活选择:

  • 「average」

average策略下,相同数值的元素的排名是其内部排名的均值:

s = pd.Series([1, 2, 2, 2, 3, 4, 4, 5, 6])
s.rank(method='average')

图12

  • 「min」

min策略下,相同元素的排名为其内部排名的最小值:

s.rank(method='min')

图13

  • 「max」

max策略与min正好相反,取的是相同元素内部排名的最大值:

s.rank(method='max')

图14

  • 「dense」

dense策略下,相当于对序列去重后进行排名,再将每个元素的排名赋给相同的每个元素,这种方式也是比较贴合实际需求的:

s.rank(method='dense')

图15

  • 「first」

first策略下,当多个元素相同时,会根据这些相同元素在实际Series中的顺序分配排名:

s = pd.Series([2, 2, 2, 1, 3])
s.rank(method='first')

图16

目录
相关文章
|
设计模式 敏捷开发 Java
全网首发!Java界的四大名著之一:Java编程思想最新中文版已开源
老版《Java编程思想》(原书名《Thinking in Java》)得益作者开放深度研讨的创作方式,受到了全世界读者的追捧,被译为了十几种语言。但遗憾的是,在经历了 4 个版本的更新后,其最后一版发布于 2007 年,之后再无更新。
|
监控 算法
偏最小二乘(Partial Least Squares,PLS)原理及模型建立
偏最小二乘(Partial Least Squares,PLS)原理及模型建立
偏最小二乘(Partial Least Squares,PLS)原理及模型建立
|
JavaScript 前端开发
Ant Design Vue 从V3到V4的升级原来进行了这个技术的调整
Ant Design Vue 从V3到V4的升级原来进行了这个技术的调整,你有了解吗?
1161 0
|
NoSQL 数据可视化 关系型数据库
推荐几个好用的redis可视化工具
推荐几个好用的redis可视化工具
17681 1
|
10月前
|
人工智能 算法 数据格式
DeepSeek 开源周第二弹!DeepEP:专为 MoE 训练和推理设计的并行通信库
DeepEP 是 DeepSeek 开源的首个专为混合专家模型(MoE)训练和推理设计的通信库,支持高吞吐量、低延迟通信,优化 NVLink 和 RDMA 网络性能。
821 3
|
JSON 前端开发 API
【跨域报错解决方案】Access to XMLHttpRequest at ‘http://xxx.com/xxx‘ from origin ‘null‘ has been blocked by
【跨域报错解决方案】Access to XMLHttpRequest at ‘http://xxx.com/xxx‘ from origin ‘null‘ has been blocked by
4437 0
|
NoSQL Redis 数据安全/隐私保护
redis设置密码
redis设置密码
1432 1
|
缓存 监控 持续交付
|
监控 NoSQL 数据可视化
Redis数据可视化如何实现?
Redis 是一种高性能键值存储数据库,广泛应用于缓存、消息队列等场景。随着 Redis 的普及,高效管理 Redis 数据变得至关重要。Redis 可视化工具应运而生,帮助用户直观地查看和管理数据,提升工作效率。本文推荐了几款优秀工具,如 Redis Desktop Manager、Redis Commander、RedisInsight 等,详细介绍了它们的功能、特点及适用场景,帮助您选择最适合需求的工具。此外,还推荐了板栗看板等协作工具,以增强团队协作效率。
355 0
|
SQL 数据可视化 前端开发
从探索式数据分析到现代 BI 仪表盘:Superset 2.0
从探索式数据分析到现代 BI 仪表盘:Superset 2.0
852 0