如何使用正則表示式和資料型別選擇多個 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。

更新於:2020年11月10日

684 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.