溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pandas 選取行和列數據的方法詳解

發布時間:2020-10-03 16:08:04 來源:腳本之家 閱讀:247 作者:Stone0823 欄目:開發技術

前言

本文介紹在 pandas 中如何讀取數據行列的方法。數據由行和列組成,在數據庫中,一般行被稱作記錄 (record),列被稱作字段 (field)?;仡櫼幌挛覀儗τ涗浐妥侄蔚墨@取方式:一般情況下,字段根據名稱獲取,記錄根據篩選條件獲取。比如獲取 student_id 和 studnent_name 兩個字段;記錄篩選,比如 sales_amount 大于 10000 的所有記錄。對于熟悉 SQL 語句的人來說,就是下面的語句:

select student_id, student_name
from exam_scores
where chinese >= 90 and math >= 90

上面的 SQL 語句表示從考試成績表 (exam_scores) 中,篩選出語文和數學都大于或等于 90 分的所有學生 id 和 name。學習 pandas 數據獲取,推薦這種以數據處理的目標為導向的方式,而不是被動的按 pandas 提供的 loc, iloc的語法中,一條條順序學習。

本篇我們要分析的關于銷售數量和金額的一組數據,數據存放在 csv 文件中。示例數據我在 github 上放了一份,方便大家對照練習。

pandas 選取行和列數據的方法詳解

選擇列

以下兩種方法返回 Series 類型:

import pandas as pd
df = pd.read_csv('sample-salesv3.csv')
df.name
# 或者
df['name']

如果需要返回 DataFrame 格式,使用 list 作為參數。為了方便說明,給出在 jupyter notebook 中顯示的界面。

pandas 選取行和列數據的方法詳解

如果需要選取多列,傳給 DataFrame 一個包含列名的 list:

pandas 選取行和列數據的方法詳解

選擇行

假設我們要篩選 quantity < 0 的所有記錄:

pandas 選取行和列數據的方法詳解

按多條件篩選的處理方式。假設想篩選 quantity < 0 并且 unit price > 50 的所有記錄:

pandas 選取行和列數據的方法詳解

代碼:

criteria = (df['quantity'] < 0) & (df['unit price'] > 50)
df[criteria].head()

在 pandas 中,AND 條件的運算符為 & ,OR 條件的運算符為 |。假設想篩選所有 quantity > 30 或 unit price > 50 的記錄:

pandas 選取行和列數據的方法詳解

代碼:

criteria = (df['quantity'] > 30) | (df['unit price'] > 50)
df[criteria].head()

基于字符串的記錄篩選

如果篩選條件為基于字符串,可以使用用 Series.str.xxx 方法,主要有 startswith, endswith 和 contains等。舉一個例子,篩選出所有 name 含有 White 的記錄:

pandas 選取行和列數據的方法詳解

代碼:

criteria = df['name'].str.contains('White')
df[criteria].head()

這里解釋一下 pandas 布爾索引 (boolean indexing) 的概念。布爾索引的意思是首先構建一個與 DataFrame 的 index 長度相同的一個 boolean 向量 (boolean vector),這個向量中只包含 True 或者 False,布爾索引是一個 Series。

然后 DataFrame 在篩選的時候,基于 DataFrame 的行索引,當布爾索引相同行索引所在行的 value 為 True 時,DataFrame 的這一行就包含在篩選之中,否則就排除在外。

為了能看得更加清晰,我們把上面的例子用另外一個方法來展示。創建一個新列:is_selected,這一列是一個布爾索引。

df['is_selected'] = df['name'].str.contains('White')

我們看到,is_selected 由 True 和 False 構成。

pandas 選取行和列數據的方法詳解

構建了 is_selected 列之后,通過df[df['name'].str.contains('White')] 篩選與下面的語句作用相同:

df[df['is_selected'] == True]

可以把 df['name'].str.contains('White') 這個布爾索引理解為構建了一個新列,然后基于這一列進行篩選。

基于 DateTime 類型的記錄篩選

如果列的類型是 DateTime 類型,比如本示例的 date 列。pandas 讀取 csv 文件時,date 列是 str 類型,所以我們先將 date 列轉換成 datetime 類型,然后基于 pandas 的 Timestamp 類型構建篩選條件。

# 將 date 列轉換成 datetime 類型
df['date'] = pd.to_datetime(df['date'])

# 篩選條件為日期大于 2014/4/1
criteria = df['date'] > pd.Timestamp(2014,4,1)
df[criteria].head()

pandas 選取行和列數據的方法詳解

同時選擇行和列

如果基于本篇所說的模式,同時選擇行和列,最簡單的方法是組合,比如先基于行構建 DataFrame,然后再基于這個 DataFrame 選取需要的列:

where = df['name'].str.contains('White')
cols = ['name', 'quantity', 'unit price', 'ext price']
df[where][cols].head()

pandas 選取行和列數據的方法詳解

參考

Comparison with SQL

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女