Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >20 个短小精悍的 pandas 骚操作!

20 个短小精悍的 pandas 骚操作!

作者头像
小F
发布于 2021-08-20 09:21:36
发布于 2021-08-20 09:21:36
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,我是东哥

本次为大家整理了一个pandas骚操作操作的大集合,共20个功能,个个短小精悍,一次让你爱个够。

1. ExcelWriter

很多时候dataframe里面有中文,如果直接输出到csv里,中文将显示乱码。而Excel就不一样了,ExcelWriterpandas的一个类,可以使dataframe数据框直接输出到excel文件,并可以指定sheets名称。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df1 = pd.DataFrame([["AAA", "BBB"]], columns=["Spam", "Egg"])
df2 = pd.DataFrame([["ABC", "XYZ"]], columns=["Foo", "Bar"])
with ExcelWriter("path_to_file.xlsx") as writer:
    df1.to_excel(writer, sheet_name="Sheet1")
    df2.to_excel(writer, sheet_name="Sheet2")

如果有时间变量,输出时还可以date_format指定时间的格式。另外,它还可以通过mode设置输出到已有的excel文件中,非常灵活。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with ExcelWriter("path_to_file.xlsx", mode="a", engine="openpyxl") as writer:
    df.to_excel(writer, sheet_name="Sheet3")

2. pipe

pipe管道函数可以将多个自定义函数装进同一个操作里,让整个代码更简洁,更紧凑。

比如,我们在做数据清洗的时候,往往代码会很乱,有去重、去异常值、编码转换等等。如果使用pipe,将是这样子的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
diamonds = sns.load_dataset("diamonds")

df_preped = (diamonds.pipe(drop_duplicates).
                      pipe(remove_outliers, ['price', 'carat', 'depth']).
                      pipe(encode_categoricals, ['cut', 'color', 'clarity'])
            )

两个字,干净!

3. factorize

factorize这个函数类似sklearnLabelEncoder,可以实现同样的功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Mind the [0] at the end
diamonds["cut_enc"] = pd.factorize(diamonds["cut"])[0]

>>> diamonds["cut_enc"].sample(5)

52103    2
39813    0
31843    0
10675    0
6634     0
Name: cut_enc, dtype: int64

区别是,factorize返回一个二值元组:编码的列和唯一分类值的列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
codes, unique = pd.factorize(diamonds["cut"], sort=True)

>>> codes[:10]
array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2], dtype=int64)

>>> unique
['Ideal', 'Premium', 'Very Good', 'Good', 'Fair']

4. explode

explode爆炸功能,可以将array-like的值比如列表,炸开转换成多行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("dirty")

data.explode("dirty", ignore_index=True)

这部分可以参考我之前写的骚操作系列:explode 列转行的 2 个常用技巧!

5. squeeze

很多时候,我们用.loc筛选想返回一个值,但返回的却是个series。其实,只要使用.squeeze()即可完美解决。比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 没使用squeeze
subset = diamonds.loc[diamonds.index < 1, ["price"]]
# 使用squeeze
subset.squeeze("columns")

可以看到,压缩完结果已经是int64的格式了,而不再是series。这部分可以参考我之前写的骚操作系列:Squeeze 类型压缩小技巧!

6. between

dataframe的筛选方法有很多,常见的locisin等等,但其实还有个及其简洁的方法,专门筛选数值范围的,就是between,用法很简单。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
diamonds[diamonds["price"]\
      .between(3500, 3700, inclusive="neither")].sample(5)

7. T

这是所有的dataframe都有的一个简单属性,实现转置功能。它在显示describe时可以很好的搭配。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
boston.describe().T.head(10)

8. pandas styler

pandas也可以像excel一样,设置表格的可视化条件格式,而且只需要一行代码即可(可能需要一丢丢的前端HTML和CSS基础知识)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> diabetes.describe().T.drop("count", axis=1)\
                 .style.highlight_max(color="darkred")

当然了,条件格式有非常多种。详细的可以参考我之前写的骚操作系列:一行 pandas 代码搞定 Excel “条件格式”!

9. Pandas options

pandas里提供了很多宏设置选项,被分为下面5大类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dir(pd.options)
['compute', 'display', 'io', 'mode', 'plotting']

一般情况下使用display会多一点,比如最大、最小显示行数,画图方法,显示精度等等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pd.options.display.max_columns = None
pd.options.display.precision = 5

这部分东哥之前进行过总结,可以参考我之前写的骚操作系列:pandas 8 个常用的 option 设置

10. convert_dtypes

经常使用pandas的都知道,pandas对于经常会将变量类型直接变成object,导致后续无法正常操作。这种情况可以用convert_dtypes进行批量的转换,它会自动推断数据原来的类型,并实现转换。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sample = pd.read_csv(
    "data/station_day.csv",
    usecols=["StationId", "CO", "O3", "AQI_Bucket"],
)

>>> sample.dtypes

StationId      object
CO            float64
O3            float64
AQI_Bucket     object
dtype: object

>>> sample.convert_dtypes().dtypes

StationId      string
CO            float64
O3            float64
AQI_Bucket     string
dtype: object

可以参考我之前写的骚操作系列:pandas变量类型自动转换

11. select_dtypes

在需要筛选变量类型的时候,可以直接用selec _dtypes,通过includeexclude筛选和排除变量的类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 选择数值型的变量
diamonds.select_dtypes(include=np.number).head()
# 排除数值型的变量
diamonds.select_dtypes(exclude=np.number).head()

12. mask

mask可以在自定义条件下快速替换单元值,在很多三方库的源码中经常见到。比如下面我们想让age为50-60以外的单元为空,只需要在conohter写好自定义的条件即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ages = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages")

ages.mask(cond=~ages["ages"].between(50, 60), other=np.nan)

13. 列轴的min、max

虽然大家都知道minmax的功能,但应用在列上的应该不多见。这对函数其实还可以这么用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"]
libraries = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"]

df = pd.DataFrame(
    {lib: np.random.uniform(90, 100, 5) for lib in libraries}, index=index
)

>>> df
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df.max(axis=1)

Diamonds         99.52684
Titanic          99.63650
Iris             99.10989
Heart Disease    99.31627
Loan Default     97.96728
dtype: float64

14. nlargest、nsmallest

有时我们不仅想要列的最小值/最大值,还想看变量的前 N 个或 ~(top N) 个值。这时nlargestnsmallest就派上用场了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
diamonds.nlargest(5, "price")

15. idmax、idxmin

我们用列轴使用maxmin时,pandas 会返回最大/最小的值。但我现在不需要具体的值了,我需要这个最大值的位置。因为很多时候要锁定位置之后对整个行进行操作,比如单提出来或者删除等,所以这种需求还是很常见的。

使用idxmaxidxmin即可解决。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> diamonds.price.idxmax()
27749

>>> diamonds.carat.idxmin()
14

16. value_counts

在数据探索的时候,value_counts是使用很频繁的函数,它默认是不统计空值的,但空值往往也是我们很关心的。如果想统计空值,可以将参数dropna设置为False

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ames_housing = pd.read_csv("data/train.csv")

>>> ames_housing["FireplaceQu"].value_counts(dropna=False, normalize=True)

NaN    0.47260
Gd     0.26027
TA     0.21438
Fa     0.02260
Ex     0.01644
Po     0.01370
Name: FireplaceQu, dtype: float64

17. clip

异常值检测是数据分析中常见的操作。使用clip函数可以很容易地找到变量范围之外的异常值,并替换它们。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> age.clip(50, 60)

18. at_time、between_time

在有时间粒度比较细的时候,这两个函数超级有用。因为它们可以进行更细化的操作,比如筛选某个时点,或者某个范围时间等,可以细化到小时分钟。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> data.at_time("15:00")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from datetime import datetime

>>> data.between_time("09:45", "12:00")

19. hasnans

pandas提供了一种快速方法hasnans来检查给定series是否包含空值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
series = pd.Series([2, 4, 6, "sadf", np.nan])

>>> series.hasnans
True

该方法只适用于series的结构。

20. GroupBy.nth

此功能仅适用于GroupBy对象。具体来说,分组后,nth返回每组的第n行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> diamonds.groupby("cut").nth(5)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
万水千山总是情,点个 ? 行不行。

推荐阅读

···  END  ···
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 法纳斯特 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
20 个短小精悍的 pandas 骚操作
大家好,我是东哥啊。 本次为大家整理了一个pandas骚操作操作的大集合,共20个功能,个个短小精悍,一次让你爱个够。系列内容,请看?「pandas100个骚操作」话题。 另外,最近收到出版社送的一本
Python数据科学
2021/08/10
1.2K0
20 个短小精悍的 pandas 骚操作
《Pandas 1.x Cookbook · 第二版》第03章 创建和持久化DataFrame
当调用DataFrame构造器时,Pandas会创建一个RangeIndex对象:
SeanCheney
2021/03/02
1.4K0
《Pandas 1.x Cookbook · 第二版》第03章 创建和持久化DataFrame
pandas 玩转 Excel 操作总结
pandas是一款基于NumPy的数据分析工具。它提供了大量的能使我们快捷处理数据的方法。
北山啦
2022/11/27
2.8K0
pandas 玩转 Excel 操作总结
【Python】这25个Pandas高频实用技巧,不得不服!
今天给大家准备了25个pandas高频实用技巧,让你数据处理速度直接起飞。文章较长,建议收藏!
黄博的机器学习圈子
2022/11/07
6.8K0
【Python】这25个Pandas高频实用技巧,不得不服!
首次公开,用了三年的 pandas 速查表!
导读:Pandas 是一个强大的分析结构化数据的工具集,它的使用基础是 Numpy(提供高性能的矩阵运算),用于数据挖掘和数据分析,同时也提供数据清洗功能。
IT阅读排行榜
2022/04/14
7.6K0
首次公开,用了三年的 pandas 速查表!
99%的人都不知道的pandas骚操作(二)
上一篇介绍了accessor的用法,很多朋友看过后都恍然大悟,原来我们常用的str也只是其中之一而已。本篇我们将继续介绍几个pandas的骚操作。
Python数据科学
2019/12/05
8820
快乐学习Pandas入门篇:Pandas基础
寄语:本文对Pandas基础内容进行了梳理,从文件读取与写入、Series及DataFrame基本数据结构、常用基本函数及排序四个模块快速入门。同时,文末给出了问题及练习,以便更好地实践。
Datawhale
2020/04/22
2.5K0
Pandas 基础
Pandas 库基于 NumPy 构建,为 Python 编程语言提供易于使用的数据结构和数据分析工具。
iOSDevLog
2019/05/25
9260
快速入门pandas进行数据挖掘数据分析[多维度排序、数据筛选、分组计算、透视表](一)
Python使用缩进(tab或者空格)来组织代码,而不是像其 他语言比如R、C++、Java和Perl那样用大括号。考虑使用for循 环来实现排序算法:
汀丶人工智能
2023/02/14
5390
快速入门pandas进行数据挖掘数据分析[多维度排序、数据筛选、分组计算、透视表](一)
Pandas 2.2 中文官方教程和指南(九·一)
在这里,我们讨论了与 pandas 数据结构共同的许多基本功能。首先,让我们创建一些示例对象,就像我们在 10 分钟入门 pandas 部分中所做的那样:
ApacheCN_飞龙
2024/05/24
3010
Pandas 2.2 中文官方教程和指南(九·二)
尝试比较不同长度的 Index 或 Series 对象将引发 ValueError:
ApacheCN_飞龙
2024/05/24
2580
Pandas 2.2 中文官方教程和指南(二十二)
时间增量是时间之间的差异,以不同的单位表示,例如天、小时、分钟、秒。它们可以是正数也可以是负数。
ApacheCN_飞龙
2024/05/24
1690
pandas
pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
润森
2019/08/29
7870
pandas
Pandas中文官档~基础用法2
Series 与 DataFrame 支持大量计算描述性统计的方法与操作。这些方法大部分都是 sum()、mean()、quantile() 等聚合函数,其输出结果比原始数据集小;此外,还有输出结果与原始数据集同样大小的 cumsum() 、 cumprod() 等函数。这些方法都基本上都接受 axis 参数,如, ndarray.{sum,std,…},但这里的 axis 可以用名称或整数指定:
小小詹同学
2019/10/29
7310
Pandas 2.2 中文官方教程和指南(十·一)
pandas I/O API 是一组顶级reader函数,如pandas.read_csv()通常返回一个 pandas 对象。相应的writer函数是对象方法,如DataFrame.to_csv()。下面是包含可用reader和writer的表格。
ApacheCN_飞龙
2024/05/24
6650
《Pandas 1.x Cookbook · 第二版》第01章 Pandas基础
下载本书:https://www.jianshu.com/p/62524f4c240e
SeanCheney
2021/02/04
1.2K0
Pandas基本功能详解 | 轻松玩转Pandas(2)
在  Pandas数据结构详解 | 轻松玩转Pandas(1) 介绍了 Pandas 中常用的两种数据结构 Series 以及 DataFrame,这里来看下这些数据结构都有哪些常用的功能。 # 导入相关库 import numpy as np import pandas as pd 常用的基本功能 当我们构建好了 Series 和 DataFrame 之后,我们会经常使用哪些功能呢?来跟我看看吧。引用上一章节中的场景,我们有一些用户的的信息,并将它们存储到了 DataFrame 中。 因为大多数
禹都一只猫olei
2018/09/19
1.7K0
jupyter notebook 之 pandas_2
∑ni=1(xi−mean)2n⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯√∑i=1n(xi−mean)2n
以某
2023/03/07
8360
数据处理 | 学会这些pandas函数,让你的数据处理更快人一步
如果要获取总分排名前10的学生信息,大家可能会按照总分排序然后head(10)来操作一番,但是如果遇到同排名的情况导致前10的学生数超过10个肿么办呢?
DataCharm
2021/04/16
4190
python使用pandas的常用操作
Pandas 的名字来源于“Panel Data”和“Python Data Analysis Library”的缩写。它最初由 Wes McKinney 开发,旨在提供高效、灵活的数据操作和分析工具。Pandas 在数据科学、统计分析、金融、经济学等领域得到了广泛应用。
梦无矶小仔
2024/06/06
4040
python使用pandas的常用操作
推荐阅读
相关推荐
20 个短小精悍的 pandas 骚操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验