如何使用正则表达式和数据类型选择多个 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.