可以将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列按列名。
此方法非常方便使用字符串搜索和选择列。它的工作方式与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的重复
如果您只想过滤和使用某些数据类型,则.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:数据类型“字符串”不被理解”,请用对象代替字符串。