快速解釋如何使用pandas的inplace參數

2020-12-15 deephub

介紹

在操作dataframe時,初學者有時甚至是更高級的數據科學家會對如何在pandas中使用inplace參數感到困惑。

更有趣的是,我看到的解釋這個概念的文章或教程並不多。它似乎被假定為知識或自我解釋的概念。不幸的是,這對每個人來說都不是那麼簡單,因此本文試圖解釋什麼是inplace參數以及如何正確使用它。

讓我們來看看一些使用inplace的函數的例子:

fillna()dropna()sortvalues()resetindex()sort_index()rename()

我已經創建了這個列表,可能還有更多的函數使用inplace作為參數。我沒有記住所有這些函數,但是作為參數的幾乎所有pandas DataFrame函數都將以類似的方式運行。這意味著在處理它們時,您將能夠應用本文將介紹的相同邏輯。

創建一個示例DataFrame

為了說明inplace的用法,我們將創建一個示例DataFrame。

import pandas as pdimport numpy as npclient_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()

我們創建了一個數據框架,該數據框架有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函數不返回任何內容。它用所需的操作修改現有的dataframe,並在原始dataframe上「就地」(inplace)執行。

如果在dataframe上運行head()函數,應該會看到有兩行被刪除。

df_1.head()

現在我們用inplace = False運行相同的代碼。注意,這次我們將使用df_2版本的df

df_2.dropna(inplace=False)

如果您在Jupyter notebook中運行此代碼,您將看到有一個輸出(上面的屏幕截圖)。inplace = False函數將返回包含刪除行的數據。

記住,當inplace被設置為True時,不會返回任何東西,但是原始數據被修改了。

那麼這一次原始數據會發生什麼呢?讓我們調用head()函數進行檢查。

df_2.head()

原始數據不變!那麼發生了什麼?

當您使用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設計師很好,他們實際上是在警告你不要做你可能不想做的事情。該代碼正在更改只有兩列的dataframe,而不是原始數據框架。這樣做的原因是,您選擇了dataframe的一個片段,並將dropna()應用到這個片段,而不是原始dataframe。

為了糾正它,可以這樣使用

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

這將導致從dataframe中刪除第二個name和age列中值為空的行。

將變量值賦給inplace= True的結果

df = df.dropna(inplace=True)

這又是你永遠不應該做的事情!你只需要將None重新賦值給df。記住,當你使用inplace=True時,什麼也不會返回。因此,這段代碼的結果是將把None分配給df。

總結

我希望本文為您揭開inplace參數的神秘面紗,您將能夠在您的代碼中正確地使用它。

相關焦點

  • Pandas的介紹與基本使用
    1、什麼是Pandas當大家談論到數據分析時,提及最多的語言就是Python和SQL,而Python之所以適合做數據分析,就是因為他有很多強大的第三方庫來協助,pandas就是其中之一,它是基於Numpy構建的,正因pandas的出現,讓Python語言也成為使用最廣泛而且強大的數據分析環境之一。
  • 127、使用pandas讀取文本文件
    pandas提供了一些用於將表格型數據讀取為DataFrame對象的函數,其中常用read_csv和read_table讀取文件。0.png下面出現的例子中需要讀取的文件都存放在我自己的電腦 D:Pytho\notebookpydata-book-masterch06 中。
  • Pandas時間序列詳解 | 輕鬆玩轉Pandas(6)
    答案是可以的,通過 to_datetime 能快速將字符串轉換為時間戳。當傳遞一個Series時,它會返回一個Series(具有相同的索引),而類似列表的則轉換為DatetimeIndex。例如,我想要生成 "2018-6-26" 這一天之後的8天時間戳,如何完成呢?我們可以使用 date_range 和 bdate_range 來完成時間戳範圍的生成。
  • 數據可視化(二)丨使用pandas和seaborn繪圖
    大部分的pandas繪圖方法接受一個ax參數,可以作為一個matplotlib subplot對象。這給我們更強的靈活性在gird layout(網格樣式)中放置subplot。對於需要匯總的數據,使用seaborn能方便很多。
  • Python基礎 | pandas.dataframe 專題使用指南
    8.1.組建方法——pd.DataFramepd.DataFrame(data=None, index=None, columns=None)data= 數據index= 索引,即行名、行表頭columns= 列名、列表頭
  • Pandas進階Excel【六】——排序
    如上表所示,如何按體術升序或者降序,再將名次排列出來呢?
  • 快速介紹Python數據分析庫pandas的基礎知識和代碼示例
    「軟體工程師閱讀教科書作為參考時不會記住所有的東西,但是要知道如何快速查找重要的知識點。」為了能夠快速查找和使用功能,使我們在進行機器學習模型時能夠達到一定流程化。我創建了這個pandas函數的備忘單。這不是一個全面的列表,但包含了我在構建機器學習模型中最常用的函數。讓我們開始吧!
  • 一張圖就能徹底搞定Pandas
    昨天在面向GitHub編程時,無意發現了Pandas官方竟提供了同款小抄,項目地址如下https://github.com/pandas-dev/pandas/blob/master/doc/cheatsheet/Pandas_Cheat_Sheet.pdf
  • 如何通過一頓飯來說明NumPy與pandas的功用
    上圖展示了NumPy、pandas(以及matplotlib)的歷史總共下載量等信息。可以看出,兩者總共有過近80萬的下載量,如果按照市場價值計量,兩者合計價值近1500萬美元,但它們都可以免費使用。NumPy除了在相當程度上優化了Python計算過程,其自身還有較多的高級特性,如指定數組存儲的行優先或者列優先、廣播功能從而快速的對不同形狀的矩陣進行計算、ufunc類型的函數可以使得我們丟開循環而編寫出更為簡潔也更有效率的代碼、使用開源項目Numba編寫快速的NumPy函數,而Numba則是可以利用GPU進行運算的。
  • 玩轉Pandas,讓數據處理更easy系列5
    easy系列2玩轉Pandas,讓數據處理更easy系列3玩轉Pandas,讓數據處理更easy系列4以上4篇總結了Pandas主要的兩個數據結構:Series(一維)和DataFrame(二維),系統地介紹了創建,索引,增刪改查Series, DataFrame等常用操作接口,總結了Series如何裝載到
  • Pandas文本數據處理 | 輕鬆玩轉Pandas(4)
    比如,我想要將每個城市都轉為小寫,可以使用如下的方式。_constructor(new_values,pandas/_libs/src\inference.pyx in pandas.這時候我們的 str 屬性操作來了,來看看如何使用吧。
  • Pandas數據清洗系列:DataFrame.sample方法方法詳解
    從今天開始,我們開始更新pandas數據清洗系列。今天我們來學習pandas中的DataFrame.sample方法。pandas數據清洗系列開篇先介紹這個方法並沒有什麼特殊含義,主要是因為今天工作中剛好用到了這個方法。現在只不過是趁熱打鐵,將其整理成文而已。
  • Pandas萬花筒:讓繪圖變得更美觀
    筆者常用 Pandas 的繪圖功能快速地執行一些可視的數據探索,但在介紹數據洞察時,我會使用「更美觀」的繪圖庫(如 Plotly 或 Bokeh )來重做可視化。自最新的 Pandas 版本0.25.3發布後,無需這樣做了,現在我們可以使用第三方可視化庫作為 Pandas 繪圖功能的後端。
  • 十分鐘學習pandas!pandas常用操作總結!
    學習Python, 當然少不了pandas,pandas是python數據科學中的必備工具,熟練使用pandas是從sql boy/girl 跨越到一名優秀的數據分析師傅的必備技能。這篇pandas常用操作總結幫大家回顧下pandas的常用語法,尤其是我們分析數據時常用的方法。
  • 精通Pandas,從零基礎到中級運用,看這一篇就夠了
    它的好處在於你可以只用pandas語法,但是卻擁有好幾人的功力,就跟天龍八部的慕容復一樣。pandas就像Python中的Excel:它使用表格(即DataFrame)並對數據進行轉換操作。但它能做的事情其實還有很多。如果你已經熟悉Python,你可以直接進入第3段。如果你還不熟悉Python,建議你一步步從頭開始。讓我們開始吧!
  • 柳小白Python學習筆記34 pandas對Excel表格基本信息的查看
    接下來就學習幾個快速查看工作表數據信息的方法。一、使用head()重新設置預覽行數先用昨天學過的head()方法預覽工作表的前10行數據。昨天是沒有給head()傳入參數,默認預覽前5行數據。我們在打開文件的語句裡加入header參數,把索引位置為9的行數設置為列索引。
  • Pandas GUI:如何輕鬆獲取Pandas數據幀?
    本文將介紹它的各種功能以及在數據中使用的方法。PandasGUI,顧名思義,是一個用於分析Pandas數據幀的圖形用戶界面。該項目仍在積極開發中,可能會發生顛覆性的變化。PandasGUI已經裝配了一些示例數據集,我們使用的是庫中已有的Titanic數據集。Titanic是機器學習中相當有名的「Hello World」數據集,其任務是創建一個模型,預測哪些乘客會在鐵達尼號沉船事故中倖存。
  • Pandas官方文檔中文版PDF下載
    57 來源: 飛總聊IT 舉報   Pandas是一個強大的分析結構化數據的工具集;它的使用基礎是
  • PandaSQL:一個讓你能夠通過SQL語句進行pandas的操作的python包
    這篇文章將介紹一種在pandas的dataframe中使用SQL的python包,並且使用一個不等連結的查詢操作來介紹PandasSQL的使用方法。不等連接(Non-equi join)假設你必須連接兩個dataframe。其中一個顯示了我們對某些商品進行促銷的時間段。
  • pandas數據處理:常用卻不甚了解的函數,pd.read_excel()
    人們經常用pandas處理表格型數據,時常需要讀入excel表格數據,很多人一般都是直接這麼用:pd.read_excel(「文件路徑文件名」),再多一點的設置可能是轉義一下路徑中的斜槓,一旦原始的excel表不是很規整,這樣簡單讀入勢必報錯!