Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >分享30个超级好用的Pandas实战技巧

分享30个超级好用的Pandas实战技巧

作者头像
用户6888863
发布于 2022-06-08 10:58:03
发布于 2022-06-08 10:58:03
67500
代码可运行
举报
文章被收录于专栏:AI篮球与生活AI篮球与生活
运行总次数:0
代码可运行

今天小编来和大家分享几个Pandas实战技巧,相信大家看了之后肯定会有不少的收获。

读取数据

read_csv()用来读取csv格式的数据集,当然我们这其中还是有不少玄机在其中的

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

只读取数据集当中的某几列

我们只是想读取数据集当中的某几列,就可以调用其中的usecols参数,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = pd.read_csv("house_price.csv", usecols=["Id", "SalePrice"])
df.head()

output

时间类型的数据解析

主要用到的是parse_dates参数,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = pd.read_csv("Tesla.csv", parse_dates=["Date"])
df.head()

output

对于数据类型加以设定

主要调用的是dtype这个参数,同时合适的数据类型能够为数据集节省不少的内存空间,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = pd.read_csv("data.csv", dtype={"house_type": "category"})

设置索引

用到的是index_col这个参数,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = pd.read_csv("Tesla.csv", index_col="Date")
df.head()

output

只读取部分读取

用到的是nrows参数,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = pd.read_csv("Tesla.csv", nrows=100)
df.shape

output

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(100, 7)

跳过某些行

要是数据集当中存在着一些我们并不想包括在内的内容,可以直接跳过,skiprows参数,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pd.read_csv("data.csv", skiprows=[1, 5])  # 跳过第一和第五行
pd.read_csv("data.csv", skiprows=100)  # 跳过前100行
pd.read_csv("data.csv", skiprows=lambda x: x > 0 and np.random.rand() > 0.1) # 抽取10%的数据

遇到了空值咋办呢?

要是遇到了空值,我们可以将空值用其他的值来代替,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = pd.read_csv("data.csv", na_values=["?"])

那么布尔值呢?

对于布尔值而言,我们也可以设定换成是其他的值来代替,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = pd.read_csv("data.csv", true_values=["yes"], false_values=["no"])

从多个csv文件中读取数据

还可以从多个csv文件当中来读取数据,通过glob模块来实现,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import glob
import os

files = glob.glob("file_*.csv")

result = pd.concat([pd.read_csv(file) for file in files], ignore_index=True)

要是从PDF文件当中来读取数据

我们的表格数据存在于pdf文件当中,需要从pdf文件当中来读取数据,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 安装tabula-py模块
# %pip install tabula-py 

from tabula import read_pdf
df = read_pdf('test.pdf', pages='all')

探索性数据分析

三行代码直接生成

通过调用pandas_profilling模块,三行代码直接生成数据分析的报告,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 安装pandas-profilling模块
# %pip install pandas-profiling

import pandas_profiling

df = pd.read_csv("data.csv")
profile = df.profile_report(title="Pandas Profiling Report")
profile.to_file(output_file="output.html")

基于数据类型的操作

pandas能够表示的数据类型有很多

基于数据类型来筛选数据

我们希望筛选出来的数据包含或者是不包含我们想要的数据类型的数据,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 筛选数据
df.select_dtypes(include="number")
df.select_dtypes(include=["category", "datetime"])

# 排除数据
df.select_dtypes(exclude="object")

推断数据类型

主要调用的是infer_objects()方法,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.infer_objects().dtypes

手动进行数据类型的转换

我们手动地进行数据类型的转换,要是遇到不能转换的情况时,errors='coerce'将其换转成NaN,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 针对整个数据集都有效
df = df.apply(pd.to_numeric, errors="coerce")

# 将空值用零来填充
pd.to_numeric(df.numeric_column, errors="coerce").fillna(0)

一次性完成数据类型的转换

用到的是astype方法,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = df.astype(
    {
        "date": "datetime64[ns]",
        "price": "int",
        "is_weekend": "bool",
        "status": "category",
    }
)

列的操作

重命名

rename()方法进行列的重命名,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = df.rename({"PRICE": "price", "Date (mm/dd/yyyy)": "date", "STATUS": "status"}, axis=1)

添加前缀或者是后缀

add_prefix()方法以及add_suffix()方法,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.add_prefix("pre_")
df.add_suffix("_suf")

新建一个列

调用的是assign方法,当然除此之外还有其他的方法可供尝试,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 摄氏度与华氏度之间的数制转换
df.assign(temp_f=lambda x: x.temp_c * 9 / 5 + 32)

在指定的位置插入新的一列

同样也是用到insert方法,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
random_col = np.random.randint(10, size=len(df))
df.insert(3, 'random_col', random_col) # 在第三列的地方插入

if-else逻辑判断

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df["price_high_low"] = np.where(df["price"] > 5, "high", "low")

去掉某些列

调用的是drop()方法,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.drop('col1', axis=1, inplace=True)
df = df.drop(['col1','col2'], axis=1)
df.drop(df.columns[0], inplace=True)

字符串的操作

列名的操作

要是我们想要对列名做出一些改变,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 对于列名的字符串操作
df.columns = df.columns.str.lower()
df.columns = df.columns.str.replace(' ', '_')

Contains()方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 是否包含了某些字符串
df['name'].str.contains("John")
## 里面可以放置正则表达式
df['phone_num'].str.contains('...-...-....', regex=True)  # regex

findall()方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 正则表达式
pattern = '([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\\.([A-Z]{1,9})'
df['email'].str.findall(pattern, flags=re.IGNORECASE)

缺失值

查看空值的比例

我们要是想要查看在数据集当中空值所占的比例,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def missing_vals(df):
    """空值所占的百分比"""
    missing = [
        (df.columns[idx], perc)
        for idx, perc in enumerate(df.isna().mean() * 100)
        if perc > 0
    ]

    if len(missing) == 0:
        return "没有空值数据的存在"
        
    # 排序
    missing.sort(key=lambda x: x[1], reverse=True)

    print(f"总共有 {len(missing)} 个变量存在空值\n")

    for tup in missing:
        print(str.ljust(f"{tup[0]:<20} => {round(tup[1], 3)}%", 1))

output

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
总共有 19 个变量存在空值

PoolQC               => 99.521%
MiscFeature          => 96.301%
Alley                => 93.767%
Fence                => 80.753%
FireplaceQu          => 47.26%
LotFrontage          => 17.74%
GarageType           => 5.548%
GarageYrBlt          => 5.548%
GarageFinish         => 5.548%
GarageQual           => 5.548%
GarageCond           => 5.548%
BsmtExposure         => 2.603%
BsmtFinType2         => 2.603%
BsmtQual             => 2.534%
BsmtCond             => 2.534%
BsmtFinType1         => 2.534%
MasVnrType           => 0.548%
MasVnrArea           => 0.548%
Electrical           => 0.068%

空值的处理方式

我们可以选择将空值去除掉,或者用平均值或者其他数值来进行填充,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 去除掉空值 
df.dropna(axis=0)
df.dropna(axis=1)

# 换成其他值来填充
df.fillna(0)
df.fillna(method="ffill")
df.fillna(method='bfill')

# 取代为其他的数值
df.replace( -999, np.nan)
df.replace("?", np.nan)

# 推测其空值应该为其他什么数值
ts.interpolate() # time series
df.interpolate() # fill all consecutive values forward
df.interpolate(limit=1) # fill one consecutive value forward
df.interpolate(limit=1, limit_direction="backward")
df.interpolate(limit_direction="both")

日期格式的数据处理

获取指定时间的数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 从今天开始算,之后的N天或者N个礼拜或者N个小时
date.today() + datetime.timedelta(hours=30)
date.today() + datetime.timedelta(days=30)
date.today() + datetime.timedelta(weeks=30)

# 过去的一年
date.today() - datetime.timedelta(days=365)

通过日期时间来获取数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df[(df["Date"] > "2015-10-01") & (df["Date"] < "2018-01-05")]

通过指定日期来获取数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 筛选出某一天的数据
df[df["Date"].dt.strftime("%Y-%m-%d") == "2022-03-05"]

# 筛选出某一个月的数据
df[df["Date"].dt.strftime("%m") == "12"]

# 筛选出每一年的数据
df[df["Date"].dt.strftime("%Y") == "2020"]

将格式化数据集

保留指定位数

对于一些浮点数的数据,我们希望可以保留小数点后的两位或者是三位,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
format_dict = {
    "Open": "${:.2f}",
    "Close": "${:.2f}",
    "Volume": "{:,}",
}

df.style.format(format_dict)

output

高亮显示数据

对于指定的一些数据,我们希望是高亮显示,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(
    df.style.format(format_dict)
    .hide_index()
    .highlight_min(["Open"], color="blue")
    .highlight_max(["Open"], color="red")
    .background_gradient(subset="Close", cmap="Greens")
    .bar('Volume', color='lightblue', align='zero')
    .set_caption('Tesla Stock Prices in 2017')
)

output

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

本文分享自 关于数据分析与可视化 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Python】这25个Pandas高频实用技巧,不得不服!
今天给大家准备了25个pandas高频实用技巧,让你数据处理速度直接起飞。文章较长,建议收藏!
黄博的机器学习圈子
2022/11/07
6.8K0
【Python】这25个Pandas高频实用技巧,不得不服!
Pandas的10个常用函数总结
Dataframe:是一种二维数据结构,它基本上是两个或多个Series的组合。它们也可以被认为是数据的电子表格,是我们最常用的数据结构。
deephub
2021/10/09
9480
20个经典函数细说Pandas中的数据读取与存储
大家好,今天小编来为大家介绍几个Pandas读取数据以及保存数据的方法,毕竟我们很多时候需要读取各种形式的数据,以及将我们需要将所做的统计分析保存成特定的格式。
用户6888863
2021/12/10
3.3K0
20个经典函数细说Pandas中的数据读取与存储
6个提升效率的pandas小技巧
文章来源:towardsdatascience 作者:B.Chen 翻译\编辑:Python大数据分析
刘早起
2020/09/23
3K0
6个提升效率的pandas小技巧
6个提升效率的pandas小技巧
pandas中的read_clipboard()方法非常神奇,可以把剪切板中的数据变成dataframe格式,也就是说直接在excel中复制表格,可以快速转化为dataframe。
龙哥
2020/09/22
2.5K0
6个提升效率的pandas小技巧
【原创干货】6000字、22个案例详解Pandas数据分析/预处理时的实用技巧,超简单
上两篇原创的文章,小编主要是讲了数据可视化方面的内容,但是好像看得人不是很多的样子(搞得小编心里拔凉拔凉的....)
用户6888863
2022/04/13
1.6K0
【原创干货】6000字、22个案例详解Pandas数据分析/预处理时的实用技巧,超简单
Pandas read_csv 参数详解
在使用 Pandas 进行数据分析和处理时,read_csv 是一个非常常用的函数,用于从 CSV 文件中读取数据并将其转换成 DataFrame 对象。read_csv 函数具有多个参数,可以根据不同的需求进行灵活的配置。本文将详细介绍 read_csv 函数的各个参数及其用法,帮助大家更好地理解和利用这一功能。
霍格沃兹测试开发Muller老师
2024/04/25
5590
Pandas数据读取:CSV文件
Pandas 是 Python 中一个强大的数据分析库,它提供了大量的工具用于数据操作和分析。其中,read_csv 函数是 Pandas 中最常用的函数之一,用于从 CSV 文件中读取数据。本文将详细介绍 read_csv 的基本用法,常见问题及其解决方案,并通过代码案例进行说明。
Jimaks
2024/12/18
5770
Pandas高级数据处理:实时数据处理
在当今的数据驱动时代,实时数据处理变得越来越重要。Pandas作为Python中强大的数据分析库,提供了丰富的功能来处理和分析结构化数据。本文将从基础到高级逐步介绍Pandas在实时数据处理中的应用,涵盖常见问题、常见报错及解决方案,并通过代码案例进行详细解释。
Jimaks
2025/02/17
1380
13个Pandas实用技巧,有点香 !
归纳整理了一些工作中常用到的pandas使用技巧,方便更高效地实现数据分析。文章很短,不用收藏就能Get~
Python数据科学
2020/06/22
1K0
史上最全!用Pandas读取CSV,看这篇就够了
导读:pandas.read_csv接口用于读取CSV格式的数据文件,由于CSV文件使用非常频繁,功能强大,参数众多,因此在这里专门做详细介绍。
CDA数据分析师
2021/08/05
76.9K2
史上最全!用Pandas读取CSV,看这篇就够了
快乐学习Pandas入门篇:Pandas基础
寄语:本文对Pandas基础内容进行了梳理,从文件读取与写入、Series及DataFrame基本数据结构、常用基本函数及排序四个模块快速入门。同时,文末给出了问题及练习,以便更好地实践。
Datawhale
2020/04/22
2.5K0
Pandas 2.2 中文官方教程和指南(十六)
numpy.nan适用于 NumPy 数据类型。使用 NumPy 数据类型的缺点是原始数据类型将被强制转换为np.float64或object。
ApacheCN_飞龙
2024/04/25
4060
Pandas 2.2 中文官方教程和指南(十六)
Python Pandas 用法速查表
设置列名dataframe.columns=['col1','col2','col3']
白墨石
2021/01/13
1.9K0
pandas.read_csv 详细介绍
《Pandas 教程》 修订中,可作为 Pandas 入门进阶课程、Pandas 中文手册、用法大全,配有案例讲解和速查手册。提供建议、纠错、催更等加作者微信: sinbam 和关注公众号「盖若」ID: gairuo。查看更新日志。
Twcat_tree
2022/12/05
5.4K0
Pandas 2.2 中文官方教程和指南(十·二)
将多级索引的 DataFrames 存储为表与存储/选择同质索引的 DataFrames 非常相似。
ApacheCN_飞龙
2024/05/24
6500
Pandas 常见用法总结
一、数据生成与导入 import pandas as pd # 利用Pandas里面的read系列可直接读取相应格式的数据文件。 df = pd.read_csv('./data.csv') 二、数据信息查看 # 查看整体信息 df.info() #查看维度 df.shape # 查看列名 df.columns # 查看数据类型 df.dtypes # 查看空值 df.isnull() # 查看age唯一值 df['age'].unique() # 查看数据表值 df.values # 查看
TalkPython
2019/05/24
8300
Pandas高级数据处理:数据报告生成实战指南
常见报错:KeyError: "None of [Index(['错误列名']...)] are in the [columns]"
Jimaks
2025/02/13
890
Pandas入门2
对于DataFrame,对齐会同时发生在行和列上,两个DataFrame对象相加后,其索引和列会取并集,缺省值用NaN。
潇洒坤
2018/09/10
4.4K0
Pandas入门2
pandas 读取csv 数据 read_csv 参数详解
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 主要引入了两种新的数据结构:DataFrame 和 Series。
上海-悠悠
2024/04/18
8950
pandas 读取csv 数据 read_csv 参数详解
相关推荐
【Python】这25个Pandas高频实用技巧,不得不服!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验