如何使用正则表达式和数据类型选择多个DataFrame列

可以将DataFrame与电子表格或具有行和列的数据库中保存的数据集进行比较。DataFrame是2D对象。

好吧,与一维和二维术语混淆了吗?

1D(系列)和2D(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
original_language
original_title
人气
发布日期
收入
运行
状态
标题
平均投票
投票数
0
237000000
19995

头像
150.437577
2009年10月12日
2787965087
162.0
已发行
头像
7.2
11800
1
3亿
285

加勒比海盗:世界尽头
139.082615
19/05/2007
961000000
169.0
已发行
加勒比海盗:世界尽头
6.9
4500
2
245000000
206647

幽灵
107.376788
2015/10/26
880674609
148.0
已发行
幽灵
6.3
4466
3
250000000
49026

黑暗骑士崛起
112.312950
2012年7月16日
1084939099
165.0
已发行
黑暗骑士崛起
7.6
9106
4
260000000
49529

约翰·卡特
43.926995
2012年7月3日
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
幽灵
3
黑暗骑士崛起
4
约翰·卡特
...
...
4798
El Mariachi
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
幽灵
148.0
6.3
4466
3
黑暗骑士崛起
165.0
7.6
9106
4
约翰·卡特
132.0
6.1
2124
...
...
...
...
...
4798
El Mariachi
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
幽灵
148.0
6.3
4466
3
黑暗骑士崛起
165.0
7.6
9106
4
约翰·卡特
132.0
6.1
2124
...
...
...
...
...
4798
El Mariachi
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)



original_title
标题
0
头像
头像
1
加勒比海盗:世界尽头
加勒比海盗:世界尽头
2
幽灵
幽灵
3
黑暗骑士崛起
黑暗骑士崛起
4
约翰·卡特
约翰·卡特

.regex –使用regualr表达式选择列名称的更灵活方法

# Select the columns that end with "t"
movies_dataset.filter(regex=t).head()



预算
投票数
0
237000000
11800
1
3亿
4500
2
245000000
4466
3
250000000
9106
4
260000000
2124

.items –将列名作为字符串或列表传递给索引运算符,但不会引发KeyError的重复

按数据类型的DataFrame列。

如果您只想过滤和使用某些数据类型,则.select_dtypes方法适用于列数据类型。

同样,.select_dtypes方法在其包含或排除参数中接受多种数据类型(按列表)或单一数据类型(作为字符串),并返回仅包含那些给定数据类型的列的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 DataFrames中过滤整数数据类型。

movies_dataset select_dtypes(include="int")head(3)


2
1
0


b)。从pandas DataFrames中选择整数和浮点数据类型。

您可以指定多种数据类型,如下所示。

movies_dataset select_dtypes(include=["int64","float"]).head(3)



预算
ID
人气
收入
运行
平均投票
投票数
0
237000000
19995
150.437577
2787965087
162.0
7.2
11800
1
3亿
285
139.082615
961000000
169.0
6.9
4500
2
245000000
206647
107.376788
880674609
148.0
6.3
4466

c)好吧,如果您只想要所有数字数据类型,只需指定数字

movies_dataset select_dtypes(include=["number"]).head(3)



预算
ID
人气
收入
运行
平均投票
投票数
0
237000000
19995
150.437577
2787965087
162.0
7.2
11800
1
3亿
285
139.082615
961000000
169.0
6.9
4500
2
245000000
206647
107.376788
880674609
148.0
6.3
4466

d)。从pandas DataFrames中排除某些数据类型。


movies_dataset select_dtypes(exclude=["object"]).head(3)



预算
ID
人气
收入
运行
平均投票
投票数
0
237000000
19995
150.437577
2787965087
162.0
7.2
11800
1
3亿
285
139.082615
961000000
169.0
6.9
4500
2
245000000
206647
107.376788
880674609
148.0
6.3
4466


注意:-没有要处理的字符串数据类型,大熊猫将它们转换为对象,因此如果遇到异常“ TypeError:数据类型“字符串”不被理解”,请用对象代替字符串。