Skip to content

数据查看 ​

方法/属性作用
df.head(n)查看前 n 行数据(不写 n 默认 5)
df.tail(n)查看结尾 n 行数据
df.describe()数值列的统计描述(计数、均值、标准差、最值、四分位)
df.info()查看数据信息(列名、非空计数、数据类型)
df.shape属性,查看数据维度(行数, 列数)
df.columns属性,查看列名

TIP

拿到一份新数据,习惯动作是 head() 看长相 + info() 看有没有缺失 + describe() 看数值是否离谱。

数据选择 ​

选列 ​

python
df['列名']              # 单选一列(返回 Series)
df.列名                 # 同上(列名是合法标识符时才能这么写)
df[['列1', '列2']]      # 多选(注意里面是**列表**,返回 DataFrame)

选行:iloc 与 loc ​

方法依据是否包含结束位置语法
df.iloc[start:stop:step]行号(第几行)不包含 stopdf.iloc[0:5] 取前 5 行
df.loc[start:stop:step]索引标签包含 stopdf.loc[6805677496:5888085066:2]

WARNING

这是最容易混的一对:iloc 按"第几行"数、不含结尾;loc 按"索引值"找、含结尾。跟 Python 普通切片(不含结尾)一样的只有 iloc。

数据过滤 ​

语法:df[条件表达式],结果是满足条件的行。

python
# 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)在区间内
& / ``

相关 ​

练习题 ​

一、知识回顾(读完直接做下面的实践题) ​

  1. 查看前 n 行用 df.head(n),查看末尾 n 行用 df.tail(n)
  2. 查看数值列统计描述用 df.describe();查看列名、非空计数、类型用 df.info()
  3. 选一列:df['列名'] 返回 Series;选多列:df[['列1','列2']] 返回 DataFrame
  4. 基于行号切片用 df.iloc(不包含结尾);基于索引标签切片用 df.loc(会包含结尾)
  5. 判断某列的值是否属于一个集合,用 df['列'].isin([...])
  6. 判断某列的值是否在区间内,用 df['列'].between(a, b)
  7. 多条件过滤时,"并且"用符号 &、"或者"用 |,且每个条件要用圆括号括起来

二、裸写题 ​

数据:data/sales.csv(列:订单号、产品类别、产品名称、销售数量、单价、客户所在城市、支付方式、订单日期)

  • - 提示(先自己想,实在想不出再点开)

    一级 · 思路:三段式查看:看长相 → 看规模 → 看数值分布 二级 · 方法:head() / shape / describe()三级 · 骨架:pd.read_csv('data/sales.csv')

    - 参考答案(做完再点开)

    python
    import pandas as pd
    
    df = pd.read_csv('data/sales.csv')
    
    # 2-1
    print(df.head(5))
    print(df.shape)
    print(df.describe())
  • - 提示(先自己想,实在想不出再点开)

    一级 · 思路:一列是 Series,多列是 DataFrame 二级 · 方法:df['产品名称'] / df[['产品名称', '单价']]三级 · 骨架:用 type() 打印类型对比

    - 参考答案(做完再点开)

    python
    # 2-2
    print(type(df['产品名称']))            # <class 'pandas.core.series.Series'>
    print(type(df[['产品名称', '单价']]))   # <class 'pandas.core.frame.DataFrame'>
  • - 提示(先自己想,实在想不出再点开)

    一级 · 思路:四种过滤各写一行,注意多条件的括号 二级 · 方法:比较运算 / isin([...]) / between(a, b) / (条件1) & (条件2)三级 · 骨架:df[(df['销售数量'] >= 8) ____ (df['单价'] >= 100)]

    - 参考答案(做完再点开)

    python
    # 2-3
    print(df[df['销售数量'] >= 10])
    print(df[df['产品类别'].isin(['食品', '图书'])])
    print(df[df['单价'].between(79, 199)])
    print(df[(df['销售数量'] >= 8) & (df['单价'] >= 100)])
  • - 提示(先自己想,实在想不出再点开)

    一级 · 思路:iloc 数"第几行"、不含结尾;loc 看"索引值"、含结尾 二级 · 方法:df.iloc[0:5] / df.loc[2:4]三级 · 骨架:打印 len() 对比

    - 参考答案(做完再点开)

    python
    # 2-4
    print(len(df.iloc[0:5]))    # 5 行
    print(len(df.loc[2:4]))     # 3 行(含索引 2、3、4)