如何使用正則表示式和資料型別選擇多個 DataFrame 列
DataFrame 可以比作儲存在電子表格或資料庫中的資料集,具有行和列。DataFrame 是一個二維物件。
好的,對一維和二維術語感到困惑?
一維 (Series) 和二維 (DataFrame) 的主要區別在於,你需要多少個資訊點才能得到單個數據點。以 Series 為例,如果要提取一個值,只需要一個參考點,即行索引。
相比之下,對於表格 (DataFrame),一個參考點不足以獲得資料點,需要行值和列值的交集。
下面的程式碼片段展示瞭如何從 csv 檔案建立 Pandas DataFrame。
.read_csv() 方法預設建立 DataFrame。 你可以在 kaggle.com 搜尋電影來下載電影資料集。
"""Script : Create a Pandas DataFrame from a csv file.""" import pandas as pd movies_dataset pd read_csv "https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv") # 1 print the type of object type(movies_dataset) # 2 print the top 5 records in a tabular format movies_dataset head(5)
| 預算 | ID | 原始語言 | 原始標題 | 受歡迎程度 | 發行日期 | 收入 | 片長 | 狀態 | 標題 | 平均投票 | 投票數 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 237000000 | 19995 | 英文 | 阿凡達 | 150.437577 | 10/12/2009 | 2787965087 | 162.0 | 已發行 | 阿凡達 | 7.2 | 11800 |
| 1 | 300000000 | 285 | 英文 | 加勒比海盜:世界的盡頭 | 139.082615 | 19/05/2007 | 961000000 | 169.0 | 已發行 | 加勒比海盜:世界的盡頭 | 6.9 | 4500 |
| 2 | 245000000 | 206647 | 英文 | 007:幽靈黨 | 107.376788 | 26/10/2015 | 880674609 | 148.0 | 已發行 | 007:幽靈黨 | 6.3 | 4466 |
| 3 | 250000000 | 49026 | 英文 | 蝙蝠俠:黑暗騎士崛起 | 112.312950 | 16/07/2012 | 1084939099 | 165.0 | 已發行 | 蝙蝠俠:黑暗騎士崛起 | 7.6 | 9106 |
| 4 | 260000000 | 49529 | 英文 | 約翰·卡特 | 43.926995 | 7/03/2012 | 284139100 | 132.0 | 已發行 | 約翰·卡特 | 6.1 | 2124 |
2. 選擇單個 DataFrame 列。將列名作為字串或列表傳遞給索引運算子將返回列值作為 Series 或 DataFrame。
如果我們傳入列名的字串,則輸出為 Series,但是,傳入只有一個列名的列表將返回 DataFrame。我們將透過示例說明這一點。
# select the data as series movies_dataset["title"]
0 Avatar 1 Pirates of the Caribbean: At World's End 2 Spectre 3 The Dark Knight Rises 4 John Carter ... 4798 El Mariachi 4799 Newlyweds 4800 Signed, Sealed, Delivered 4801 Shanghai Calling 4802 My Date with Drew Name: title, Length: 4803, dtype: object
# select the data as DataFrame movies_dataset[["title"]]
| 標題 | |
|---|---|
| 0 | 阿凡達 |
| 1 | 加勒比海盜:世界的盡頭 |
| 2 | 007:幽靈黨 |
| 3 | 蝙蝠俠:黑暗騎士崛起 |
| 4 | 約翰·卡特 |
| ... | ... |
| 4798 | 愛爾瑪麗亞奇 |
| 4799 | 新婚夫婦 |
| 4800 | 簽署、密封、遞送 |
| 4801 | 上海來電 |
| 4802 | 我和德魯的約會 |
3. 選擇多個 DataFrame 列。
# Multiple DataFrame columns movies_dataset[["title""runtime","vote_average","vote_count"]]
| 標題 | 片長 | 平均投票 | 投票數 | |
|---|---|---|---|---|
| 0 | 阿凡達 | 162.0 | 7.2 | 11800 |
| 1 | 加勒比海盜:世界的盡頭 | 169.0 | 6.9 | 4500 |
| 2 | 007:幽靈黨 | 148.0 | 6.3 | 4466 |
| 3 | 蝙蝠俠:黑暗騎士崛起 | 165.0 | 7.6 | 9106 |
| 4 | 約翰·卡特 | 132.0 | 6.1 | 2124 |
| ... | ... | ... | ... | ... |
| 4798 | 愛爾瑪麗亞奇 | 81.0 | 6.6 | 238 |
| 4799 | 新婚夫婦 | 85.0 | 5.9 | 5 |
| 4800 | 簽署、密封、遞送 | 120.0 | 7.0 | 6 |
| 4801 | 上海來電 | 98.0 | 5.7 | 7 |
| 4802 | 我和德魯的約會 | 90.0 | 6.3 | 16 |
為了避免程式碼可讀性問題,我始終建議定義一個變數來儲存列名列表,並使用列名而不是在程式碼中指定多個列名。
columns=["title","runtime","vote_average","vote_count"]movies_dataset[columns]
| 標題 | 片長 | 平均投票 | 投票數 | |
|---|---|---|---|---|
| 0 | 阿凡達 | 162.0 | 7.2 | 11800 |
| 1 | 加勒比海盜:世界的盡頭 | 169.0 | 6.9 | 4500 |
| 2 | 007:幽靈黨 | 148.0 | 6.3 | 4466 |
| 3 | 蝙蝠俠:黑暗騎士崛起 | 165.0 | 7.6 | 9106 |
| 4 | 約翰·卡特 | 132.0 | 6.1 | 2124 |
| ... | ... | ... | ... | ... |
| 4798 | 愛爾瑪麗亞奇 | 81.0 | 6.6 | 238 |
| 4799 | 新婚夫婦 | 85.0 | 5.9 | 5 |
| 4800 | 簽署、密封、遞送 | 120.0 | 7.0 | 6 |
| 4801 | 上海來電 | 98.0 | 5.7 | 7 |
| 4802 | 我和德魯的約會 | 90.0 | 6.3 | 16 |
4. 透過列名選擇 DataFrame 列。
.filter() 方法
此方法非常方便地使用字串搜尋和選擇列。它的工作方式與 SQL 中的 like %% 引數非常相似。請記住,.filter() 方法僅透過檢查列名而不是實際資料值來選擇列。
.filter() 方法支援三個可用於選擇操作的引數。
.like
.regex
.items
like parameter takes a string and attempts to find the column names that contain this string somewhere in the column name.
# Select the column that have a column name like "title" movies_dataset.filter(like="title").head(5)
| 原始標題 | 標題 | |
|---|---|---|
| 0 | 阿凡達 | 阿凡達 |
| 1 | 加勒比海盜:世界的盡頭 | 加勒比海盜:世界的盡頭 |
| 2 | 007:幽靈黨 | 007:幽靈黨 |
| 3 | 蝙蝠俠:黑暗騎士崛起 | 蝙蝠俠:黑暗騎士崛起 |
| 4 | 約翰·卡特 | 約翰·卡特 |
.regex – 使用正則表示式選擇列名更靈活的方式
# Select the columns that end with "t" movies_dataset.filter(regex=t).head()
| 預算 | 投票數 | |
|---|---|---|
| 0 | 237000000 | 11800 |
| 1 | 300000000 | 4500 |
| 2 | 245000000 | 4466 |
| 3 | 250000000 | 9106 |
| 4 | 260000000 | 2124 |
.items – 與將列名作為字串或列表傳遞給索引運算子相同,只是不會引發 KeyError
按資料型別選擇 DataFrame 列。
如果您有興趣過濾和僅使用某些資料型別,則 .select_dtypes 方法適用於列資料型別。
同樣,.select_dtypes 方法在其 include 或 exclude 引數中接受多個數據型別(透過列表)或單個數據型別(作為字串),並返回一個只包含那些給定資料型別的列的 DataFrame。
.include 引數包含具有指定資料型別/型別的列,而 .exclude 將忽略具有指定資料型別的列。
讓我們首先檢視資料型別以及具有這些資料型別的列的數量
movies_dataset=pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv"
movies_dataset.dtypes.value_counts()object 5 int64 4 float64 3 dtype: int64
a) 從 pandas DataFrame 中過濾整數資料型別。
movies_dataset select_dtypes(include="int")head(3)
| 2 |
|---|
| 1 |
| 0 |
b). 從 pandas DataFrame 中選擇整數和浮點資料型別。
您可以如下所示指定多個數據型別作為列表。
movies_dataset select_dtypes(include=["int64","float"]).head(3)
| 預算 | ID | 受歡迎程度 | 收入 | 片長 | 平均投票 | 投票數 | |
|---|---|---|---|---|---|---|---|
| 0 | 237000000 | 19995 | 150.437577 | 2787965087 | 162.0 | 7.2 | 11800 |
| 1 | 300000000 | 285 | 139.082615 | 961000000 | 169.0 | 6.9 | 4500 |
| 2 | 245000000 | 206647 | 107.376788 | 880674609 | 148.0 | 6.3 | 4466 |
c) 好吧,如果您只需要所有數值資料型別,只需指定 number
movies_dataset select_dtypes(include=["number"]).head(3)
| 預算 | ID | 受歡迎程度 | 收入 | 片長 | 平均投票 | 投票數 | |
|---|---|---|---|---|---|---|---|
| 0 | 237000000 | 19995 | 150.437577 | 2787965087 | 162.0 | 7.2 | 11800 |
| 1 | 300000000 | 285 | 139.082615 | 961000000 | 169.0 | 6.9 | 4500 |
| 2 | 245000000 | 206647 | 107.376788 | 880674609 | 148.0 | 6.3 | 4466 |
d). 從 pandas DataFrame 中排除某些資料型別。
movies_dataset select_dtypes(exclude=["object"]).head(3)
| 預算 | ID | 受歡迎程度 | 收入 | 片長 | 平均投票 | 投票數 | |
|---|---|---|---|---|---|---|---|
| 0 | 237000000 | 19995 | 150.437577 | 2787965087 | 162.0 | 7.2 | 11800 |
| 1 | 300000000 | 285 | 139.082615 | 961000000 | 169.0 | 6.9 | 4500 |
| 2 | 245000000 | 206647 | 107.376788 | 880674609 | 148.0 | 6.3 | 4466 |
**注意**:沒有字串資料型別可處理,pandas 將它們轉換為物件,因此如果您遇到異常“TypeError: 資料型別“string”無法理解”,請將 string 替換為 Object。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP