快速解释如何使用pandas的inplace参数的使用


Posted in Python onJuly 23, 2020

介绍

在操作数据帧时,初学者有时甚至是更高级的数据科学家会对如何在pandas中使用inplace参数感到困惑。

更有趣的是,我看到的解释这个概念的文章或教程并不多。它似乎被假定为知识或自我解释的概念。不幸的是,这对每个人来说都不是那么简单,因此本文试图解释什么是inplace参数以及如何正确使用它。

让我们来看看一些使用inplace的函数的例子:

  • fillna()
  • dropna()
  • sort_values()
  • reset_index()
  • sort_index()
  • rename()

我已经创建了这个列表,可能还有更多的函数使用inplace作为参数。我没有记住所有这些函数,但是作为参数的几乎所有pandas DataFrame函数都将以类似的方式运行。这意味着在处理它们时,您将能够应用本文将介绍的相同逻辑。

创建一个示例DataFrame

为了说明inplace的用法,我们将创建一个示例DataFrame。

import pandas as pd
import numpy as np
client_dictionary = {'name': ['Michael', 'Ana', 'Sean', 'Carl', 'Bob'], 
           'second name': [None, 'Angel', 'Ben', 'Frank', 'Daniel'],
           'birth place': ['New York', 'New York', 'Los Angeles', 'New York', 'New York'],
           'age': [10, 35, 56, None, 28],
           'number of children': [0, None, 2, 1, 1]}
df = pd.DataFrame(client_dictionary)
df.head()

快速解释如何使用pandas的inplace参数的使用

我们创建了一个数据框架,该数据框架有5行,列如下: name, second name, birthplace,age,number of children。注意,age、second name和children列中有一些缺失值(nan)。

现在我们将演示dropna()函数如何使用inplace参数工作。因为我们想要检查两个不同的变体,所以我们将创建原始数据框架的两个副本。

df_1 = df.copy()
df_2 = df.copy()

下面的代码将删除所有缺少值的行。

df_1.dropna(inplace=True)

如果您在Jupyter notebook中运行此操作,您将看到单元格没有输出。这是因为inplace=True函数不返回任何内容。它用所需的操作修改现有的数据帧,并在原始数据帧上“就地”(inplace)执行。

如果在数据帧上运行head()函数,应该会看到有两行被删除。

df_1.dropna(inplace=True)

现在我们用inplace = False运行相同的代码。注意,这次我们将使用df_2版本的df

df_2.dropna(inplace=False)

快速解释如何使用pandas的inplace参数的使用

如果您在Jupyter notebook中运行此代码,您将看到有一个输出(上面的屏幕截图)。inplace = False函数将返回包含删除行的数据。

记住,当inplace被设置为True时,不会返回任何东西,但是原始数据被修改了。

那么这一次原始数据会发生什么呢?让我们调用head()函数进行检查。

df_2.head()

快速解释如何使用pandas的inplace参数的使用

原始数据不变!那么发生了什么?

当您使用inplace=True时,将创建并更改新对象,而不是原始数据。如果您希望更新原始数据以反映已删除的行,则必须将结果重新分配到原始数据中,如下面的代码所示。

df_2 = df_2.dropna(inplace=False)

这正是我们在使用inplace=True时所做的。是的,最后一行代码等价于下面一行:

df_2.dropna(inplace=True)

后者更优雅,并且不创建中间对象,然后将其重新分配给原始变量。它直接改变原始数据框架,因此,如果需要改变原始数据,那么inplace=True是首选。

那么,为什么会有在使用inplace=True产生错误呢?我不太确定,可能是因为有些人还不知道如何正确使用这个参数。让我们看看一些常见的错误。

常见错误

使用inplace = True处理一个片段

如果我们只是想去掉第二个name和age列中的NaN,而保留number of children列不变,我们该怎么办?

我见过有人这样做:

df[['second name', 'age']].dropna(inplace=True)

这会抛出以下警告。

快速解释如何使用pandas的inplace参数的使用

这个警告之所以出现是因为Pandas设计师很好,他们实际上是在警告你不要做你可能不想做的事情。该代码正在更改只有两列的dataframe,而不是原始数据框架。这样做的原因是,您选择了dataframe的一个片段,并将dropna()应用到这个片段,而不是原始dataframe。

为了纠正它,可以这样使用

df.dropna(inplace=True, subset=['second name', 'age'])
df.head()

快速解释如何使用pandas的inplace参数的使用

这将导致从dataframe中删除第二个name和age列中值为空的行。

将变量值赋给inplace= True的结果

df = df.dropna(inplace=True)

这又是你永远不应该做的事情!你只需要将None重新赋值给df。记住,当你使用inplace=True时,什么也不会返回。因此,这段代码的结果是将把None分配给df。

总结

我希望本文为您揭开inplace参数的神秘面纱,您将能够在您的代码中正确地使用它。

到此这篇关于快速解释如何使用pandas的inplace参数的使用的文章就介绍到这了,更多相关pandas inplace参数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 Python
跟老齐学Python之有容乃大的list(2)
Sep 15 Python
Python自动登录126邮箱的方法
Jul 10 Python
可能是最全面的 Python 字符串拼接总结【收藏】
Jul 09 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 Python
python安装scipy的方法步骤
Jun 26 Python
Django使用消息提示简单的弹出个对话框实例
Nov 15 Python
使用python和pygame制作挡板弹球游戏
Dec 03 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
Jun 12 Python
如何快速一次性卸载所有python包(第三方库)呢
Oct 20 Python
Python分类测试代码实例汇总
Jul 23 #Python
基于Python3读写INI配置文件过程解析
Jul 23 #Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 #Python
Java爬虫技术框架之Heritrix框架详解
Jul 22 #Python
Python 绘制可视化折线图
Jul 22 #Python
python写文件时覆盖原来的实例方法
Jul 22 #Python
python中return不返回值的问题解析
Jul 22 #Python
You might like
无线电广播的开始
2002/01/30 无线电
php权重计算方法代码分享
2014/01/09 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
2015/12/07 PHP
Yii清理缓存的方法
2016/01/06 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
js过滤数组重复元素的方法
2010/09/05 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
HTML Dom与Css控制方法
2010/10/25 Javascript
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
vue select 获取value和lable操作
2020/08/28 Javascript
Python基于twisted实现简单的web服务器
2014/09/29 Python
Python编写生成验证码的脚本的教程
2015/05/04 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
在python环境下运用kafka对数据进行实时传输的方法
2018/12/27 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
企业消防安全制度
2014/02/02 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
python用tkinter开发的扫雷游戏
2021/06/01 Python