精通Pandas探索性分析(二):數據選擇

2021-02-21 自然資源大數據分析與應用

在本章中,我們將學習使用 Pandas 進行數據選擇的高級技術,如何選擇數據子集,如何從數據集中選擇多個行和列,如何對 Pandas 數據幀或一序列數據進行排序,如何過濾 Pandas 數據幀的角色,還學習如何將多個過濾器應用於 Pandas 數據幀。我們還將研究如何在 Pandas 中使用axis參數以及在 Pandas 中使用字符串方法。最後,我們將學習如何更改 Pandas 序列的數據類型。

首先,我們將學習如何從 Pandas 數據幀中選擇數據子集並創建序列對象。我們將從導入真實數據集開始。我們將介紹一些 Pandas 數據選擇方法,並將這些方法應用於實際數據集,以演示數據子集的選擇。

在本章中,我們將討論以下主題:

數據集簡介

我們將使用 zillow.com的真實數據集,這是一個在線房地產市場,其發布房價數據集是他們研究工作的一部分。這些數據集可在公共領域獲得,並在歸屬於 zillow.com後可免費使用。我們將使用有關美國地區平均房價的最新數據。它是 CSV 數據集,或帶有 CSV 的文本文件。讓我們首先將 pandas 模塊導入到 Jupyter 筆記本中,如下所示:

1
2

import pandas as pd
data = pd.read_csv('data-zillow.csv', sep=',')

從數據集中選擇數據

1
2

regions = data['RegionName'] #根據列名選擇
type(regions) #series對象

多列選擇

1
2
3

region_n_state = data[['RegionName', 'State']] #傳遞列名數組,選擇多個列
region_n_state.head()
type(region_n_state)#DataFrame對象

點表示法

1
2

data.State#選擇單列
data['Address'] = data.County + ', ' + data.Metro + ', ' + data.State#生成新列

從 Pandas 數據幀中選擇多個行和列

1
2

zillow.loc[7, 'Metro'] #行索引7,列名為Metro
zillow.iloc[7,4]#行索引7,列索引4

選擇單行和多列

1
2
3

zillow.loc[7, ['Metro', 'County']]
zillow.iloc[7,[4,5]]
zillow.loc[11,:]

選擇多行和單列

1

zillow.loc[101:105, 'Metro']

選擇多行和多列

1
2
3

zillow.loc[201:204, "State":"County"]
zillow.iloc[201:205, 3:6]
zillow.loc[201:205, ['RegionName', 'State']]

從行和所有列的範圍中選擇值

在這裡,我們將使用loc方法查看行和列序列中的值。為此,loc方法的第一個參數是要選擇的行的範圍索引。由於我們需要所有列中的值,因此我們將冒號(:)作為第二個參數,如下所示:

1
2
3
4

zillow.loc[201:205, :]
zillow.loc[[0,5,10], :] #選擇不連續的行
zillow.loc[zillow.County=="Queens"] #選擇County列的值為Queens的行
zillow.loc[zillow.Metro=="New York", "County"] #從County列中選擇Metro列為New York的行

對pandas數據幀排序

1
2
3
4
5
6

zillow.sort_values('Metro') #對Metro列排序(默認升序)
sorted = zillow.sort_values('Metro', ascending=False) #降序排序
sorted = zillow.sort_values(by=['Metro','County']) #按Metro首先對數據進行排序,然後按County列進行排
sorted = zillow.sort_values(by=['Metro','County', 'Zhvi'], ascending=[True, True, False])
regions = zillow.RegionID
regions.sort_values() #對Series對象排序

過濾 Pandas 數據幀的行

1
2
3
4
5

filtered_data = data.filter(items=['State', 'Metro']) #使用filter方法過濾列
filtered_data = data.filter(regex='Region', axis=1) #使用正則表達式過濾列名稱
price_filter_series = data['Zhvi'] > 500000
data[price_filter_series]
data[data.Zhvi >= 1000000] #過濾Zhvi列大於1000000的行

將多個過濾條件應用於 Pandas 數據幀

1
2

data[(data['Zhvi'] > 1000000) & (data['State'] == 'NY')] #選擇價格值大於 1,000,000 且State為New York的行
data[((data['State'] == 'CA') | (data['State'] == 'NY'))]

使用isin方法進行過濾

篩選數據的另一種方法是使用isin方法。我們可以使用isin方法通過一個或多個特定列的值列表來過濾數據集。在這裡,我們僅從Metro列中選擇值New York或San Francisco的那些記錄。

我們在Metro列上調用isin方法,並將其傳遞給包含我們要選擇的城市的列表。這將創建一個布爾序列。然後,我們將布爾序列傳遞給數據集數據幀進行必要的過濾和選擇,如下所示:

1
2

filter = data['Metro'].isin(['New York', 'San Francisco'])
data[filter].head()

在多個條件下使用isin方法

我們還可以使用isin方法根據來自多列的值過濾行。為了執行此操作,我們傳遞了一個字典對象,其中的鍵是列名,而值是我們要從中選擇記錄的那些列的值的列表。

舉個例子,讓我們選擇State參數為California和Metro參數為San Francisco的值。我們使用包含要選擇的值的這兩列創建一個字典對象,然後將該字典項傳遞給isin方法,並在數據集上調用isin方法。然後,將過濾器傳遞給數據幀並選擇我們的記錄,如下所示:

1
2

filter = data.isin({'State': ['CA'], 'Metro': ['San Francisco']})
data[filter].head()

在 Pandas 中使用axis參數

在本節中,我們將學習在 Pandas 中進行數據分析時何時何地使用axis參數或關鍵字。我們將介紹axis參數,並逐步介紹可以將axis關鍵字設置為的各種值。我們將演示如何將axis設置為行或列來改變方法的行為。我們還將展示一些使用axis關鍵字的代碼示例。

axis參數的用法

在axis用法示例中,我們計算數據集中值的平均值。我們已將axis傳遞為0。這意味著將沿著行axis計算平均值,如下所示:

輸出如下:

接下來,我們將axis設置為1。我們在同一數據集上使用完全相同的方法;但是,我們正在將axis從0更改為1。由於我們將axis設置為1,因此mean的計算如下:

1

data.mean(axis=1).head()

輸出如下:

有時很難記住0或1是用於行還是用於列。因此,您可以將axis設置為rows而不是使用axis0:

輸出為以下內容:

對於列,您可以將axis設置為columns。與使用0或1具有相同的效果:

1

data.mean(axis='columns').head()

輸出如下:

axis關鍵字的更多示例

在這裡,我們使用drop方法刪除行或記錄。我們通過將關鍵字axis傳遞為0來告訴drop方法將記錄刪除到0的索引處:

1
2

data.drop(0, axis=0) #刪除第0行
data.drop('Date', axis=1).head #刪除帶有Date標籤的列

axis關鍵字

1

data.filter(regex='Region', axis=1) #過濾列名為正則表達式'Region'的列

在 Pandas 中使用字符串方法

在本節中,我們將學習在 Pandas 序列中使用各種字符串方法。我們將把真實的數據集讀入 Pandas。我們將探索一些字符串方法,並將使用這些字符串方法從數據集中選擇和更改值。

檢查子串

為了學習如何使用字符串方法檢查 Pandas 序列的子字符串,我們使用str包中的contains方法。

在這裡,我們從數據集中調用RegionName序列上的str.contains方法。我們正在尋找包含New子字符串的記錄。它列印出一個布爾序列,列印True找到一個子字符串,而False找到一個子字符串:

1

data[data.RegionName.str.contains('New')] #過濾RegionName列中包含New字符串的行

將序列或列值更改為大寫

1

data.RegionName.str.upper()

將值更改為小寫

1
2
3
4

data.County.str.lower()
data.County.str.len()#查找列中每個值的長度
data.RegionName.str.lstrip()#刪除空格
data.RegionName.str.replace(' ','')#空格替換為無空格

更改 Pandas 序列的數據類型

在本節中,我們將學習如何更改 Pandas 序列的數據類型。我們將看到讀取其中的數據後如何更改數據類型。我們還將學習在讀取 Pandas 數據時如何更改數據類型。我們將通過一個示例將int列更改為float。我們還將看到如何將字符串值列轉換為datetime數據類型。

1

data['Zhvi'] = data.Zhvi.astype(float) #將int數據類型列更改為float

讀取數據時更改數據類型

在將數據讀入 pandas 之後,我們只是更改了列的數據類型。另外,我們可以在讀取數據時更改數據類型。為此,我們將列名和數據類型傳遞到要更改為read數據方法的列中。我們想要的float列已導入為float64:

1
2

data2 = pd.read_csv('data-zillow.csv', sep=',', dtype={'Zhvi':float})
data2.dtypes

將字符串轉換為日期時間

1

pd.to_datetime(data2.Date,infer_datetime_format=True)

總結在本章中,我們學習了從 Pandas 數據幀中選擇數據子集的方法。 我們還了解了如何將這些方法應用於真實數據集。 我們還了解了從已讀入 Pandas 的數據集中選擇多個行和列的方法,並將這些方法應用於實際數據集以演示選擇數據子集的方法。 我們了解了 Pandas sort_values方法。 我們看到了使用sort_values方法對 Pandas 數據幀中的數據進行排序的各種方法。 我們還學習了如何對 Pandas 序列對象進行排序。 我們了解了用於從 Pandas 數據幀過濾行和列的方法。 我們介紹了幾種方法來實現此目的。 我們了解了 Pandas 的filter方法以及如何在實際數據集中使用它。 我們還學習了根據從數據創建的布爾序列過濾數據的方法,並且學習了如何將過濾數據的條件直接傳遞給數據幀。 我們學習了 Pandas 數據選擇的各種技術,以及如何選擇數據子集。 我們還學習了如何從數據集中選擇多個角色和列。 我們學習了如何對 Pandas 數據幀或序列進行排序。 我們逐步介紹了如何過濾 Pandas 數據幀的行,如何對此類數據幀應用多個過濾器以及如何在 Pandas 中使用axis參數。 我們還研究了字符串方法在 Pandas 中的使用,最後,我們學習了如何更改 Pandas 序列的數據類型。

在下一章中,我們將學習處理,轉換和重塑數據的技術。敬請期待!

相關焦點

  • 如何使用Pandas-Profiling進行探索性數據分析
    當開始一個新的機器學習項目時,獲得機器學習數據集之後的第一步就是要了解它。我們可以通過執行探索性數據分析(EDA)來實現這一點。這包括找出每個變量的數據類型、目標變量的分布、每個預測變量的不同值的數量、數據集中是否有重複值或缺失值等。進行EDA探索機器學習數據集的過程往往是非常耗時的。什麼是Pandas-Profiling?
  • Pandas自動進行探索性數據分析,節省可視化和理解數據的時間
    根據Wikipedia的說法,探索性數據分析(EDA)是一種分析數據集以總結其主要特徵的方法,通常使用視覺方法。因此,EDA是理解基礎數據,變量分布及其相關性的過程。這使得EDA成為構建任何統計模型之前任何數據科學過程中的第一步。
  • 使用Pandas數據處理與分析
    前言:這是關於個人關於對pandas可以進行的數據處理和數據分析的見解的初版,其中肯定不乏一些錯誤之處,希望大家能多多指正。pandas提供了一些用於將表格型數據讀取為DataFrame對象的函數。4.數據分析終於來到了數據分析環節,前面所做的工作全是為了數據分析和數據可視化做準備。這裡本文只是進行一些簡單的數據分析,關於模型啊,算法啊……這些,這裡不做介紹,在掌握這些簡單的分析之後,可以去理解更高深的分析方法。
  • 帶你和Python與R一起玩轉數據科學: 探索性數據分析(附代碼)
    本系列將介紹如何在現在工作中用兩種最流行的開源平臺玩轉數據科學。先來看一看數據分析過程中的關鍵步驟 – 探索性數據分析。內容簡介本系列將介紹如何在現在工作中用兩種最流行的開源平臺玩轉數據科學。本文先來看一看數據分析過程中的關鍵步驟 – 探索性數據分析(Exploratory Data Analysis,EDA)。探索性數據分析發生在數據收集和數據清理之後,而在數據建模和分析結果可視化展現之前。然而,這是一個可反覆的過程。做完某種EDA後,我們可以嘗試建立一些數據模型或者生成一些可視化結果。同時,根據最新的分析結果我們又可以進行進一步的EDA,等等。
  • Python數據分析之pandas數據讀寫
    引言我們現在已經基本熟悉了pandas庫以及它所提供的用於數據分析的基礎功能,也知道了DataFrame和Series是這個庫的核心,數據處理、計算和分析都是圍繞他們展開的。你首先會學會文本文件的讀寫,隨後再逐步過渡到更加複雜的二進位文件。最後我們會講解SQL和NoSQL常用資料庫的連接方法,我們用幾個例子來說明如何直接把DataFrame中的數據存儲到資料庫中。同時,我們還會介紹如何從資料庫讀取數據,存儲為DataFrame對象,並對其進行檢索。
  • 機器學習的第一個難點,是數據探索性分析
    雖然從各種文獻中不難了解到數據探索性分析的重要性和一般的步驟流程,但是在面對實際問題時,往往會有不知道從哪兒下手以及不知道怎麼根據分析結果來優化算法的困境。本文通過對真實業務場景數據的探索性分析及建模與優化,嘗試對其進行解構,揭示其真實的意圖和作用,希望能對同行有所啟示。
  • python數據分析萬字乾貨!一個數據集全方位解讀pandas
    說到python與數據分析,那肯定少不了pandas的身影,本文希望通過分析經典的NBA數據集來系統的全方位講解pandas包,建議搭配IDE一遍敲一邊讀哦。話不多說,開始吧!>對列進行操作指定數據類型數據清洗數據可視化pandas的安裝建議直接安裝anaconda,會預置安裝好所有數據分析相關的包,當然也可以使用pip安裝。
  • 【數據分析】Pandas
    其他常用方法                ✦ ✦ ✦ ✦ ✦ ✦1、簡介pandas是一個強大的Python數據分析的工具包,它是基於Numpy構建的,正因pandas的出現sr1.iloc[1]  # 以下標解釋sr1.loc[3]  # 以標籤解釋Series數據對齊pandas在運算時,會按索引進行對齊然後計算。
  • Python數據分析:pandas讀取和寫入數據
    我的公眾號是關於自己在數據分析/挖掘學習過程中的一些技術和總結分享,文章會持續更新......繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。
  • 一文總結EDA探索性數據分析
    探索性數據分析(Exploratory Data Analysis,EDA)是一種探索數據的結構和規律的一種數據分析方法。其主要的工作包含:對數據進行清洗,對數據進行描述(描述統計量,圖表),查看數據的分布,比較數據之間的關係,培養對數據的直覺和對數據進行總結。EDA可以幫助我們找到適合的數據模型,本文針對文本數據,將進行具體的數據探索性分析講解。
  • 思考python數據分析工具pandas-1簡介
    無論是分析大量數據、呈現數據,還是對數據進行歸一化處理並重新存儲,pandas都有廣泛的功能支持大數據需求。雖然pandas並不是目前性能最強的選擇,但它是用Python編寫的,所以對於初學者來說,它很容易學習,編寫速度快,而且有豐富的API。關於pandaspandas 是用 Python 處理大數據集的常用包。
  • 5個可以幫助pandas進行數據預處理的可視化圖表
    分析數據點的探索性數據分析(EDA)是在算法的數據建模之前制定假設的正確步驟。 第1步-我們將導入pandas、matplotlib、seaborn和NumPy包,我們將使用這些包進行分析。我們需要散點圖、自相關圖、滯後圖和平行圖。
  • 探索性分析
    作者:夏雨驕陽  封面:吉江SPSS中,探索分析是對變量進行深入和詳盡的描述性統計分析,它在一般描述性統計指標的基礎上,增加關於數據其他特徵的文字與圖形描述,分析結果更加細緻與全面,有助於對數據做進一步分析。
  • Python數學建模技巧之pandas數據處理
    最常見的庫有進行矩陣運算的Numpy、進行數據處理的pandas、進行科學計算的Scipy、進行圖形繪製及科學可視化的matplotlib、進行符號計算的Sympy以及方便進行機器學習任務的Sklearn。由於今年美賽官方公告中稱,將會提前在賽題公布之前就提供下載C題數據集的方式。
  • python數據分析常用庫之pandas入門(2)
    索引、選擇和賦值昨天介紹了pandas的模塊引入、創建和讀取數據,今天主要看看怎麼從數據結構中獲得想要的值,也就是數據的索引查找、
  • 探索性因子分析(EFA)與驗證性因子分析(CFA)--應用篇
    這個主題一直是學生很關心的問題,一來是因為因子分析幾乎是所有使用統計分析撰寫論文的標配, 二來是因子分析分析方法本身就有些難度,因此好多學生分不清哪是哪
  • 全流程記錄第一個Kaggle項目:探索性數據分析(EDA)和數據處理(附圖文代碼)
    目錄 第一篇:全流程記錄新手的第一個Kaggle項目:泰坦尼克預測從Top89%到Top10% (內附附數據集和代碼)連結:第二篇(本文):探索性數據分析(EDA)和數據處理第三篇:特徵工程和模型選擇為何要做 探索性數據分析:Exploratory Data Analysis(EDA)是指對已有數據在儘量少的先驗假設下通過作圖、制表、方程擬合、計算特徵量等手段探索數據的結構和規律的一種數據分析方法,由美國統計學家John Tukey在上世紀70年代提出。沒錯,鼎鼎有名的「箱線圖」就是他發明的。
  • 關於Pandas數據處理你不知道的技巧!
    這與 pandas.Datafram.isnull() 完全相同。相關文檔:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.isna.html
  • 數據清洗和探索性分析案例分享(一)
    這篇寫寫數據清洗的具體案例分享,由於篇幅可能比較大,探索性數據分析部分可能下篇再講。
  • 基於python的大數據分析-pandas數據讀取(代碼實戰)
    長按上方二維碼加入千人QQ群基於python的大數據分析實戰學習筆記-Anaconda基於python的大數據分析實戰學習筆記-pandas(數據分析包)基於python的大數據分析實戰學習筆記-pandas之DataFrame我們常見的數據存儲格式無非就是csv、excel、txt以及資料庫等形式