了解Pandas DataFrame
在数据分析和机器学习中,Pandas DataFrame 是极其常用的一种数据结构。它类似于表格,由多个行和列组成,每个元素有相应的名称和数据类型。Pandas DataFrame 非常适合处理和分析具有结构化数据的任务,如数据清洗、预处理、统计分析等。
为了方便起见,我们在代码中使用以下命名空间:
import numpy as np
import pandas as pd
创建DataFrame
在 Pandas 中,我们可以通过许多方法来创建 DataFrame。比较常见的是使用 Python 字典或从 CSV 文件中读取。
下面这个例子演示如何通过字典创建 DataFrame:
data = {'name': ['Bob', 'Alice', 'Frank', 'Gertrude'],
'age': [23, 29, 42, 36],
'gender': ['M', 'F', 'M', 'F'],
'weight': [72.5, 65.8, 92.1, 56.2]}
df = pd.DataFrame(data)
print(df)
输出如下:
name age gender weight
0 Bob 23 M 72.5
1 Alice 29 F 65.8
2 Frank 42 M 92.1
3 Gertrude 36 F 56.2
此 DataFrame 由四个列组成:name、age、gender 和 weight,每个列有四个值。
条件选择DataFrame中的列
在 Pandas 中,可以通过切片、布尔条件和许多其他方式对 DataFrame 进行选择和过滤。下面,我们将介绍几种主要方法,以及它们如何在不同情况下使用。
从DataFrame选择列的最基本方法是通过列名。以下代码选择名为 age 和 gender 的两列:
df2 = df[['age', 'gender']]
print(df2)
输出如下:
age gender
0 23 M
1 29 F
2 42 M
3 36 F
在 DataFrame 中选择列时,您可以通过方括号引用列名。如果您要选择多列,则可以在一个方括号中包含多个列名,以列表的形式进行。
条件选择(筛选和过滤)DataFrame中的行
有时您需要从 DataFrame 中选择满足特定条件的行。此类选择称为筛选或过滤。Pandas 中有一些方法可用于执行此操作。以下是可以使用的两种方法。
使用条件表达式进行筛选
使用条件表达式的最基本方法是使用等号或不等号来比较特定列的值。以下代码选择那些名为男性且重量超过 80 磅的行:
df_male_heavy = df[(df['gender'] == 'M') & (df['weight'] > 80.0)]
print(df_male_heavy)
输出如下:
name age gender weight
2 Frank 42 M 92.1
在这里,df[‘gender’] ‘M’ 和 df[‘weight’] > 80.0 返回布尔值数组。和符号 & 可以用于将两个条件组合在一起。
使用 query() 方法进行筛选
另一种方法是使用 DataFrame 的 query() 方法。query() 方法需要一个表达式字符串作为参数,并执行此表达式。以下代码展示了使用 query() 方法选择年龄小于 30 年的女性:
df_young_female = df.query("gender == 'F' and age < 30")
print(df_young_female)
输出如下:
name age gender weight
1 Alice 29 F 65.8
在 query() 方法中,可以将条件表达式作为字符串传递,并像在 Python 中一样使用运算符和函数。其中变量名(如 gender)表示 DataFrame 中的列名,需要使用引号括起来。当使用 query() 方法时,您不必使用 DataFrame 引用,也不必在变量之前使用 df.。
使用复杂条件进行选择
在实际工作中,您可能需要更复杂的条件来选择 DataFrame 中的数据。例如,您可能想选择那些名字中包含“a”或“e”,或者体重超过 60 磅,但年龄低于 40 岁的人。
我们可以使用 Pandas 的 query() 方法来解决这些问题。以下是一些示例代码:
选择名字中包含“a”或“e”且年龄大于 30 岁的人:
df_complex = df.query("(name.str.contains('a|e', case=False)) & (age > 30)")
print(df_complex)
输出如下:
name age gender weight
2 Frank 42 M 92.1
3 Gertrude 36 F 56.2
在 query() 方法中,使用括号对条件进行分组,以确保它们正确地应用于 DataFrame。在上面的示例中,我们使用 str.contains() 函数来检查名字是否包含“a”或“e”,case=False 表示不区分大小写。
选择体重超过 60 磅但年龄低于 40 岁的人:
df_complex2 = df.query("weight > 60 and age < 40")
print(df_complex2)
输出如下:
name age gender weight
0 Bob 23 M 72.5
1 Alice 29 F 65.8
3 Gertrude 36 F 56.2
在上面的示例中,我们使用 and 运算符来组合筛选条件。可以看到,Bob、Alice 和 Gertrude 满足条件。
选择年龄等于 23 岁或体重低于 60 磅的人:
df_complex3 = df.query("(age == 23) | (weight < 60)")
print(df_complex3)
输出如下:
name age gender weight
0 Bob 23 M 72.5
3 Gertrude 36 F 56.2
在上面的示例中,我们使用 or 运算符来组合筛选条件。可以看到,Bob 和 Gertrude 满足条件。
结论
Pandas DataFrame 提供了多种方法来选择、筛选和过滤数据。可以使用基本方法,如列名称引用和条件表达式,也可以使用更复杂的方法,如 query() 方法。熟练掌握这些方法将帮助您更轻松地完成数据分析和预处理任务。