pandas 選取行和列數(shù)據(jù)的方法詳解
前言
本文介紹在 pandas 中如何讀取數(shù)據(jù)行列的方法。數(shù)據(jù)由行和列組成,在數(shù)據(jù)庫(kù)中,一般行被稱作記錄 (record),列被稱作字段 (field)?;仡櫼幌挛覀儗?duì)記錄和字段的獲取方式:一般情況下,字段根據(jù)名稱獲取,記錄根據(jù)篩選條件獲取。比如獲取 student_id 和 studnent_name 兩個(gè)字段;記錄篩選,比如 sales_amount 大于 10000 的所有記錄。對(duì)于熟悉 SQL 語(yǔ)句的人來說,就是下面的語(yǔ)句:
select student_id, student_name from exam_scores where chinese >= 90 and math >= 90
上面的 SQL 語(yǔ)句表示從考試成績(jī)表 (exam_scores) 中,篩選出語(yǔ)文和數(shù)學(xué)都大于或等于 90 分的所有學(xué)生 id 和 name。學(xué)習(xí) pandas 數(shù)據(jù)獲取,推薦這種以數(shù)據(jù)處理的目標(biāo)為導(dǎo)向的方式,而不是被動(dòng)的按 pandas 提供的 loc, iloc的語(yǔ)法中,一條條順序?qū)W習(xí)。
本篇我們要分析的關(guān)于銷售數(shù)量和金額的一組數(shù)據(jù),數(shù)據(jù)存放在 csv 文件中。示例數(shù)據(jù)我在 github 上放了一份,方便大家對(duì)照練習(xí)。
選擇列
以下兩種方法返回 Series 類型:
import pandas as pd df = pd.read_csv('sample-salesv3.csv') df.name # 或者 df['name']
如果需要返回 DataFrame 格式,使用 list 作為參數(shù)。為了方便說明,給出在 jupyter notebook 中顯示的界面。
如果需要選取多列,傳給 DataFrame 一個(gè)包含列名的 list:
選擇行
假設(shè)我們要篩選 quantity < 0 的所有記錄:
按多條件篩選的處理方式。假設(shè)想篩選 quantity < 0 并且 unit price > 50 的所有記錄:
代碼:
criteria = (df['quantity'] < 0) & (df['unit price'] > 50) df[criteria].head()
在 pandas 中,AND 條件的運(yùn)算符為 & ,OR 條件的運(yùn)算符為 |。假設(shè)想篩選所有 quantity > 30 或 unit price > 50 的記錄:
代碼:
criteria = (df['quantity'] > 30) | (df['unit price'] > 50) df[criteria].head()
基于字符串的記錄篩選
如果篩選條件為基于字符串,可以使用用 Series.str.xxx 方法,主要有 startswith, endswith 和 contains等。舉一個(gè)例子,篩選出所有 name 含有 White 的記錄:
代碼:
criteria = df['name'].str.contains('White') df[criteria].head()
這里解釋一下 pandas 布爾索引 (boolean indexing) 的概念。布爾索引的意思是首先構(gòu)建一個(gè)與 DataFrame 的 index 長(zhǎng)度相同的一個(gè) boolean 向量 (boolean vector),這個(gè)向量中只包含 True 或者 False,布爾索引是一個(gè) Series。
然后 DataFrame 在篩選的時(shí)候,基于 DataFrame 的行索引,當(dāng)布爾索引相同行索引所在行的 value 為 True 時(shí),DataFrame 的這一行就包含在篩選之中,否則就排除在外。
為了能看得更加清晰,我們把上面的例子用另外一個(gè)方法來展示。創(chuàng)建一個(gè)新列:is_selected,這一列是一個(gè)布爾索引。
df['is_selected'] = df['name'].str.contains('White')
我們看到,is_selected 由 True 和 False 構(gòu)成。
構(gòu)建了 is_selected 列之后,通過df[df['name'].str.contains('White')] 篩選與下面的語(yǔ)句作用相同:
df[df['is_selected'] == True]
可以把 df['name'].str.contains('White') 這個(gè)布爾索引理解為構(gòu)建了一個(gè)新列,然后基于這一列進(jìn)行篩選。
基于 DateTime 類型的記錄篩選
如果列的類型是 DateTime 類型,比如本示例的 date 列。pandas 讀取 csv 文件時(shí),date 列是 str 類型,所以我們先將 date 列轉(zhuǎn)換成 datetime 類型,然后基于 pandas 的 Timestamp 類型構(gòu)建篩選條件。
# 將 date 列轉(zhuǎn)換成 datetime 類型 df['date'] = pd.to_datetime(df['date']) # 篩選條件為日期大于 2014/4/1 criteria = df['date'] > pd.Timestamp(2014,4,1) df[criteria].head()
同時(shí)選擇行和列
如果基于本篇所說的模式,同時(shí)選擇行和列,最簡(jiǎn)單的方法是組合,比如先基于行構(gòu)建 DataFrame,然后再基于這個(gè) DataFrame 選取需要的列:
where = df['name'].str.contains('White') cols = ['name', 'quantity', 'unit price', 'ext price'] df[where][cols].head()
參考
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳談Pandas中iloc和loc以及ix的區(qū)別
- 對(duì)pandas中iloc,loc取數(shù)據(jù)差別及按條件取值的方法詳解
- 聊聊Python pandas 中l(wèi)oc函數(shù)的使用,及跟iloc的區(qū)別說明
- 詳解pandas中利用DataFrame對(duì)象的.loc[]、.iloc[]方法抽取數(shù)據(jù)
- 詳解pandas中iloc, loc和ix的區(qū)別和聯(lián)系
- Python Pandas數(shù)據(jù)分析之iloc和loc的用法詳解
- pandas數(shù)據(jù)處理基礎(chǔ)之篩選指定行或者指定列的數(shù)據(jù)
- pandas.DataFrame刪除/選取含有特定數(shù)值的行或列實(shí)例
- 利用Pandas讀取某列某行數(shù)據(jù)之loc和iloc用法總結(jié)
相關(guān)文章
python實(shí)現(xiàn)Windows電腦定時(shí)關(guān)機(jī)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)Windows電腦定時(shí)關(guān)機(jī)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06python實(shí)現(xiàn)淘寶秒殺聚劃算搶購(gòu)自動(dòng)提醒源碼
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)淘寶秒殺聚劃算搶購(gòu)自動(dòng)提醒源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02Python如何存儲(chǔ)數(shù)據(jù)到j(luò)son文件
這篇文章主要介紹了Python如何存儲(chǔ)數(shù)據(jù)到j(luò)son文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Python練習(xí)之讀取XML節(jié)點(diǎn)和屬性值的方法
這篇文章主要介紹了Python練習(xí)之讀取XML節(jié)點(diǎn)和屬性值的方法,通過parse函數(shù)可以讀取XML文檔,該函數(shù)返回ElementTree類型的對(duì)象,通過該對(duì)象的iterfind方法可以對(duì)XML中特定節(jié)點(diǎn)進(jìn)行迭代2022-06-06Python對(duì)兩個(gè)有序列表進(jìn)行合并和排序的例子
這篇文章主要介紹了Python對(duì)兩個(gè)有序列表進(jìn)行合并和排序的例子,最終代碼經(jīng)過不斷優(yōu)化,小編非常滿意,需要的朋友可以參考下2014-06-06利用Python代碼實(shí)現(xiàn)數(shù)據(jù)可視化的5種方法詳解
在數(shù)據(jù)科學(xué)中,有多種工具可以進(jìn)行可視化。下面這篇文章主要給大家介紹了關(guān)于利用Python代碼實(shí)現(xiàn)數(shù)據(jù)可視化的5種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2018-03-03Tensorflow tf.nn.atrous_conv2d如何實(shí)現(xiàn)空洞卷積的
這篇文章主要介紹了Tensorflow tf.nn.atrous_conv2d如何實(shí)現(xiàn)空洞卷積的,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Python標(biāo)準(zhǔn)庫(kù)os.path包、glob包使用實(shí)例
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)os.path包、glob包使用實(shí)例,本文直接給出代碼,代碼中有詳細(xì)注釋,需要的朋友可以參考下2014-11-11