目录
4.3.3、选取单行或者单列数据,选取多行或者多列数据,同时选取指定的行列数据
4.3 pandas 数据查询与选取
4.3.1、课程目标
本次课程主要围绕 pandas 的数据查询与选取功能展开,通过理论讲解和案例分析,让学员掌握从 DataFrame 中查询和选取数据的方法和技巧。学员学完本次课程后,能够熟练使用 pandas 进行数据的筛选、查询和选取操作。
4.3.2、数据查询和选取操作
在数据分析过程中,我们经常需要从大量的数据中查询和选取特定的内容。pandas 提供了丰富的方法来实现这些操作。
(一)查询和选取一张数据表格前几行内容
查询数据表格的前几行是了解数据结构和内容的常用方法。pandas 提供了head()方法来实现这一功能。
import pandas as pd
import numpy as np
# 创建示例数据
np.random.seed(42)
dates = pd.date_range('20250101', periods=100)
data = {
'日期': dates,
'产品': np.random.choice(['产品A', '产品B', '产品C', '产品D'], 100),
'地区': np.random.choice(['华东', '华南', '华北', '西南', '西北'], 100),
'销售额': np.random.randint(1000, 10000, 100),
'销售量': np.random.randint(10, 100, 100)
}
df = pd.DataFrame(data)
# 查询前几行数据
print("数据前几行内容:")
print(df.head().to_csv(sep='\t', na_rep='nan'))
# 查询前20行数据
print("\n数据前20行内容:")
print(df.head(20).to_csv(sep='\t', na_rep='nan'))
这个案例展示了如何使用head()方法查询数据表格的前几行内容,默认查询前 5 行,也可以指定查询的行数。
(二)查询和选取指定的几行内容
除了查询前几行,我们还可以查询指定的几行内容。pandas 提供了多种方法来实现这一功能。
# 查询第10行(index=9)至第15行(index=14)的数据
print("第10行至第15行的数据:")
print(df.loc[9:14].to_csv(sep='\t', na_rep='nan'))
# 查询第5行(index=4)、第10行(index=9)和第15行(index=14)的数据
print("\n第5行、第10行和第15行的数据:")
print(df.loc[[4, 9, 14]].to_csv(sep='\t', na_rep='nan'))
# 使用iloc按位置查询
print("\n按位置查询第5行、第10行和第15行的数据:")
print(df.iloc[[4, 9, 14]].to_csv(sep='\t', na_rep='nan'))
这个案例展示了如何使用loc和iloc方法查询指定的几行内容。loc方法基于标签索引,而iloc方法基于位置索引。
(三)查询和选取后几行内容
查询数据表格的后几行也是了解数据的常用方法。pandas 提供了tail()方法来实现这一功能。
# 查询后几行数据
print("数据后几行内容:")
print(df.tail().to_csv(sep='\t', na_rep='nan'))
# 查询后15行数据
print("\n数据后15行内容:")
print(df.tail(15).to_csv(sep='\t', na_rep='nan'))
这个案例展示了如何使用tail()方法查询数据表格的后几行内容,默认查询后 5 行,也可以指定查询的行数。
(四)根据特定条件查询和选择满足条件的行数据
在实际数据分析中,我们经常需要根据特定条件筛选数据。pandas 提供了灵活的布尔索引功能来实现这一需求。
# 查询销售额大于8000的行
print("销售额大于8000的行:")
print(df[df['销售额'] > 8000].to_csv(sep='\t', na_rep='nan'))
# 查询产品为'产品A'且地区为'华东'的行
print("\n产品为'产品A'且地区为'华东'的行:")
print(df[(df['产品'] == '产品A') & (df['地区'] == '华东')].to_csv(sep='\t', na_rep='nan'))
# 查询销售量在30到60之间的行
print("\n销售量在30到60之间的行:")
print(df[df['销售量'].between(30, 60)].to_csv(sep='\t', na_rep='nan'))
# 使用isin()方法查询
print("\n地区为'华东'或'华南'的行:")
print(df[df['地区'].isin(['华东', '华南'])].to_csv(sep='\t', na_rep='nan'))
这个案例展示了如何使用布尔索引和条件表达式查询满足特定条件的行数据。可以使用比较运算符、逻辑运算符和特殊方法(如between()和isin())来构建复杂的查询条件。
(五)查看数据表的行数和列数以及相关列的数据类型
了解数据表的基本信息对于数据分析非常重要。pandas 提供了多种方法来获取这些信息。
# 查看数据表的基本信息
print("数据基本信息:")
df.info()
# 查看数据表的行数和列数
rows, columns = df.shape
# 查看数据集行数和列数
if rows < 10 and columns < 10:
# 短表数据(行数少于10且列数少于10)查看全量数据信息
print("\n数据全部内容信息:")
print(df.to_csv(sep='\t', na_rep='nan'))
else:
# 长表数据查看数据前几行信息
print("\n数据前几行内容信息:")
print(df.head().to_csv(sep='\t', na_rep='nan'))
# 查看列的数据类型
print("\n列的数据类型:")
print(df.dtypes)
# 查看数据集行数和列数
rows, columns = df.shape
print(f"\n数据集行数:{rows},列数:{columns}")
这个案例展示了如何使用info()方法查看数据表的基本信息,使用dtypes属性查看列的数据类型,以及获取数据表的行数和列数。
4.3.3、选取单行或者单列数据,选取多行或者多列数据,同时选取指定的行列数据
在数据分析过程中,我们经常需要选取特定的行和列数据。pandas 提供了多种方法来实现这些操作。
(一)选取单行或者单列数据
选取单行或单列数据是数据选取的基础操作。
# 选取单列数据
print("选取'销售额'列:")
print(df['销售额'].to_csv(sep='\t', na_rep='nan'))
# 选取单列数据的另一种方式
print("\n选取'地区'列:")
print(df.地区.to_csv(sep='\t', na_rep='nan'))
# 选取单行数据(使用loc)
print("\n选取第20行(index=19):")
print(df.loc[19].to_csv(sep='\t', na_rep='nan'))
# 选取单行数据(使用iloc)
print("\n选取第30行(index=29):")
print(df.iloc[29].to_csv(sep='\t', na_rep='nan'))
这个案例展示了如何选取单列数据和单行数据。选取单列数据可以使用方括号或点号表示法,选取单行数据可以使用loc或iloc方法。
(二)选取多行或者多列数据
选取多行或多列数据是在单行或单列数据选取基础上的扩展。
# 选取多列数据
print("选取'产品'和'销售量'列:")
print(df[['产品', '销售量']].to_csv(sep='\t', na_rep='nan'))
# 选取多行数据(使用loc)
print("\n选取第10行(index=9)至第15行(index=14):")
print(df.loc[9:14].to_csv(sep='\t', na_rep='nan'))
# 选取多行数据(使用iloc)
print("\n选取第5行(index=4)至第8行(index=7):")
print(df.iloc[4:8].to_csv(sep='\t', na_rep='nan'))
这个案例展示了如何选取多列数据和多行数据。选取多列数据需要使用双重方括号,选取多行数据可以使用loc或iloc方法,并指定行的范围。
(三)同时选取指定的行列数据
在实际应用中,我们经常需要同时选取指定的行和列数据。pandas 提供了多种方法来实现这一需求。
# 使用loc同时选取指定的行和列
print("使用loc选取第10行(index=9)至第15行(index=14)的'产品'和'销售额'列:")
print(df.loc[9:14, ['产品', '销售额']].to_csv(sep='\t', na_rep='nan'))
# 使用iloc同时选取指定的行和列
print("\n使用iloc选取第5行(index=4)至第8行(index=7)的第2列和第4列:")
print(df.iloc[4:8, [1, 3]].to_csv(sep='\t', na_rep='nan'))
# 使用at选取单个值(行标签和列标签)
print("\n使用at选取第20行(index=19)的'销售额'列的值:")
print(df.at[19, '销售额'])
# 使用iat选取单个值(行位置和列位置)
print("\n使用iat选取第30行(index=29)的第4列的值:")
print(df.iat[29, 3])
这个案例展示了如何同时选取指定的行和列数据。可以使用loc方法基于标签索引,或使用iloc方法基于位置索引。此外,还可以使用at和iat方法快速选取单个值。
4.3.4、课程回顾和小结
本次课程围绕 pandas 的数据查询与选取功能展开,主要内容包括:
1.数据查询和选取操作:介绍了如何查询和选取数据表格的前几行、后几行和指定的几行内容,以及如何根据特定条件查询和选择满足条件的行数据。还介绍了如何查看数据表的行数、列数以及相关列的数据类型。
2.选取单行、单列、多行和多列数据:详细讲解了如何选取单行或单列数据,以及如何选取多行或多列数据。还介绍了如何同时选取指定的行和列数据,以及如何快速选取单个值。
通过本次课程的学习,学员应该掌握了 pandas 数据查询与选取的基本方法和技巧,能够根据实际需求从 DataFrame 中查询和选取特定的数据。这些操作是数据分析的基础,对于后续的数据处理和分析工作至关重要。
4.3.5、课后练习
练习题 1:现有一个包含学生成绩的 DataFrame,包含以下列:学生 ID、姓名、语文、数学、英语、总分。请编写代码完成以下操作:
- 查询总分最高的前 10 名学生
- 查询语文成绩在 80 分以上的学生
- 查询数学成绩在 70-90 分之间的学生
- 查询英语成绩低于 60 分的学生
- 查看 DataFrame 的基本信息、行数和列数
练习题 2:使用练习题 1 中的 DataFrame,请编写代码完成以下操作:
- 选取 ' 姓名 ' 列
- 选取第 5 行 (index=4) 至第 15 行 (index=14)
- 选取 ' 数学 ' 和' 英语 ' 列的前 20 行
- 选取总分最高的学生的所有信息
- 选取第 10 行 (index=9) 的 ' 语文 ' 成绩
练习题 3:现有一个包含销售数据的 DataFrame,包含以下列:日期、产品、地区、销售额、销售量。请编写代码完成以下操作:
- 查询 2025 年 1 月份的销售数据
- 查询销售额最高的产品
- 查询销售量最低的地区
- 查询产品为 ' 产品 A' 且销售额大于 5000 的销售记录
- 同时选取 2025 年 2 月份的 ' 产品 ' 和' 销售额 ' 列数据
以上就是本次课程的全部内容,希望学员们通过学习和练习,能够熟练掌握 pandas 的数据查询与选取功能,为后续的数据分析工作打下坚实的基础。