Pandas数据查看、选择与过滤
Pandas数据查看、选择与过滤
用 head/tail/describe/info 查看数据,用单列/多列/iloc/loc 选择数据,用条件表达式过滤数据
数据查看
| 方法/属性 | 作用 |
|---|---|
df.head(n) | 查看前 n 行数据(不写 n 默认 5) |
df.tail(n) | 查看结尾 n 行数据 |
df.describe() | 数值列的统计描述(计数、均值、标准差、最值、四分位) |
df.info() | 查看数据信息(列名、非空计数、数据类型) |
df.shape | 属性,查看数据维度(行数, 列数) |
df.columns | 属性,查看列名 |
拿到一份新数据,习惯动作是 head() 看长相 + info() 看有没有缺失 + describe() 看数值是否离谱。
数据选择
选列
df['列名'] # 单选一列(返回 Series)df.列名 # 同上(列名是合法标识符时才能这么写)df[['列1', '列2']] # 多选(注意里面是**列表**,返回 DataFrame)选行:iloc 与 loc
| 方法 | 依据 | 是否包含结束位置 | 语法 |
|---|---|---|---|
df.iloc[start:stop:step] | 行号(第几行) | 不包含 stop | df.iloc[0:5] 取前 5 行 |
df.loc[start:stop:step] | 索引标签 | 包含 stop | df.loc[6805677496:5888085066:2] |
这是最容易混的一对:iloc 按”第几行”数、不含结尾;loc 按”索引值”找、含结尾。跟 Python 普通切片(不含结尾)一样的只有 iloc。
数据过滤
语法:df[条件表达式],结果是满足条件的行。
# 1. 销售数量 >= 10 的订单df[df['销售数量'] >= 10]
# 2. 产品类别是 食品 或 图书df[df['产品类别'].isin(['食品', '图书'])]
# 3. 单价在 79-199 之间(between 默认包含两端)df[df['单价'].between(79, 199)]
# 4. 多条件:并且用 &、或者用 |(每个条件都要加括号!)df[(df['销售数量'] >= 8) & (df['单价'] >= 100)]| 写法 | 含义 |
|---|---|
df[df['列'] >= 值] | 单条件 |
df['列'].isin([值1, 值2]) | 属于集合(多选一) |
df['列'].between(a, b) | 在区间内 |
& / ` | ` |
相关
练习题
一、回忆填空(写完再展开对答案)
- 查看前 n 行用
df.____(n),查看末尾 n 行用df.____(n) - 查看数值列统计描述用
df.____();查看列名、非空计数、类型用df.____() - 选一列:
df['列名']返回 ____;选多列:df[['列1','列2']]返回 ____ - 基于行号切片用
df.____(____ 包含结尾);基于索引标签切片用df.____(____ 包含结尾) - 判断某列的值是否属于一个集合,用
df['列'].____([...]) - 判断某列的值是否在区间内,用
df['列'].____(a, b) - 多条件过滤时,“并且”用符号 ____、“或者”用 ____,且每个条件要用 ____ 括起来
填空答案(做完再点开)
- head / tail 2. describe / info 3. Series / DataFrame 4. iloc / 不、loc / 会 5. isin 6. between 7.
&/|/ 圆括号
二、裸写题
数据:data/sales.csv(列:订单号、产品类别、产品名称、销售数量、单价、客户所在城市、支付方式、订单日期)
-
2-1 先看清数据长什么样 读取
data/sales.csv,打印前 5 行、行数与列数、以及数值列的统计描述。提示(先自己想,实在想不出再点开)一级 · 思路:三段式查看:看长相 → 看规模 → 看数值分布 二级 · 方法:
head()/shape/describe()三级 · 骨架:pd.read_csv('data/sales.csv') -
2-2 选出需要的列 用两种写法选出”产品名称、单价”两列,并单独取出”产品名称”这一列,观察返回类型有什么不同。
提示一级 · 思路:一列是 Series,多列是 DataFrame 二级 · 方法:
df['产品名称']/df[['产品名称', '单价']]三级 · 骨架:用type()打印类型对比 -
2-3 条件过滤 找出:① 销售数量 ≥ 10 的订单;② 产品类别是”食品”或”图书”的订单;③ 单价在 79~199 之间;④ 销售数量 ≥ 8 并且 单价 ≥ 100 的订单。
提示一级 · 思路:四种过滤各写一行,注意多条件的括号 二级 · 方法:比较运算 /
isin([...])/between(a, b)/(条件1) & (条件2)三级 · 骨架:df[(df['销售数量'] >= 8) ____ (df['单价'] >= 100)] -
2-4 行切片 用
iloc取前 5 行,再用loc取第 3 到第 5 行(按行索引标签),对比两者取到的行数。提示一级 · 思路:iloc 数”第几行”、不含结尾;loc 看”索引值”、含结尾 二级 · 方法:
df.iloc[0:5]/df.loc[2:4]三级 · 骨架:打印len()对比
参考答案(做完再点开)
import pandas as pd
df = pd.read_csv('data/sales.csv')
# 2-1print(df.head(5))print(df.shape)print(df.describe())
# 2-2print(type(df['产品名称'])) # <class 'pandas.core.series.Series'>print(type(df[['产品名称', '单价']])) # <class 'pandas.core.frame.DataFrame'>
# 2-3print(df[df['销售数量'] >= 10])print(df[df['产品类别'].isin(['食品', '图书'])])print(df[df['单价'].between(79, 199)])print(df[(df['销售数量'] >= 8) & (df['单价'] >= 100)])
# 2-4print(len(df.iloc[0:5])) # 5 行print(len(df.loc[2:4])) # 3 行(含索引 2、3、4)评论区
如果你喜欢,那么欢迎来到我的世界!
了解更多













