云计算百科
云计算领域专业知识百科平台

Pandas DataFrame 常用方法全汇总(入门实操博文)

前言

使用 pandas 做数据分析,除了 DataFrame 基础创建、索引取值,绝大多数工作都依赖各类内置方法:查看头尾、列筛选、布尔过滤、统计计算、去重、排序、随机抽样等。本篇基于完整可运行代码,分门别类讲解高频方法,适配数据分析日常使用。

提前固定演示数据集,全文所有案例基于这份表格运行:

import pandas as pd

df = pd.DataFrame({
"name":["tom","tom","jack","alice","bob","allen"],
"age":[15,15,15,20,26,30],
"score":[60.5,60.5,80,30.6,70,83.5]
},
index=['a','b','c','d','e','f'], # 自定义行标签
columns=["name","score","age"]) # 自定义列顺序

一、查看数据头尾:head () /tail ()

只看局部行,不用打印全表,适合快速预览数据。

  • df.head(n):查看前 n 行,不传参默认展示前 5 行
  • df.tail(n):查看最后 n 行,不传参默认展示最后 5 行
  • # 查看前3行
    print("head前3行:\\n",df.head(3))
    # 查看后3行
    print("tail后3行:\\n",df.tail(3))

    # 默认5行
    print("默认前5行:",df.head())
    print("默认后5行:",df.tail())

    小技巧:可以链式搭配列筛选,先选列再取头尾,精简数据: df[['name','score']].head(3) 只看姓名、分数的前三行

    二、单列 / 多列获取,搭配头尾使用

    1. 单列 3 种写法区别

    表格

    写法返回类型特点
    df['name'] Series 一维 常用,适合单独计算
    df.name Series 一维 列名无空格 / 特殊字符才能用
    df[['name']] DataFrame 二维 保留表格格式,推荐作图、多列统一写法

    2. 多列获取

    多列必须用列表包裹列名:df[['列1','列2']]

    # 取name、score两列
    print(df[['name','score']])
    # 两列+前3行
    print(df[['name','score']].head(3))
    # 单列age+最后3行
    print(df[['age']].tail(3))

    三、布尔索引:按条件筛选行(最核心筛选)

    语法:df[条件表达式],支持单条件、多条件组合

    规则

  • 多条件必须用括号包裹每个条件
  • 且:&;或:|;不能用 and/or
  • 两种写法等价:df.score 和 df['score']
  • # 单条件:分数大于70
    print(df[df.score>70])
    print(df[df['score']>70])

    # 多条件:分数大于70 并且 年龄小于30
    res = df[(df['score']>70) & (df['age'] < 30)]
    print(res)

    四、匹配判断、空值判断:isin () /isna ()

    1. isin () 判断单元格是否包含指定内容

    用来筛选字段在某个名单里,支持多字段匹配

    # 所有单元格是否等于jack
    print(df.isin(['jack']))
    # 匹配 jack 或者数字20
    print(df.isin(['jack',20]))

    2. isna () 判断空值

    标记表格里所有缺失值 NaN,为空返回 True,非空 False

    print(df.isna())

    配套补充:notna() 判断非空。

    五、数值统计函数:单列聚合计算

    针对数值列(score、age)做统计,全部是列纵向计算。

    表格

    方法作用示例
    sum() 求和 总分
    max() 最大值 最高分
    min() 最小值 最低分
    mean() 平均值 平均分
    median() 中位数 中间分,不受极端值影响
    std() 标准差 数据波动大小
    var() 方差 离散程度
    quantile(0.25) 四分位数 25% 分位数

    print("分数求和:",df['score'].sum())
    print("最高分:",df['score'].max())
    print("最低分:",df['score'].min())
    print("平均分:",df.score.mean())
    print("中位数:",df.score.median())
    print("标准差:",df.score.std())
    print("方差:",df.score.var())
    print("25%分位数:",df.score.quantile(0.25))

    一键全量统计 describe ()

    无需逐个调用,一次性输出:计数、均值、最值、四分位数,数据分析必用:

    print(df.describe())

    六、计数统计:count () /value_counts ()

  • df.count():统计每一列非空有效单元格数量
  • df['列名'].value_counts():统计一列中每个值出现的频次(统计重复次数神器)
  • # 各列有效数据行数
    print("每一列非缺失值个数:\\n",df.count())
    # 全表行重复频次
    print("全表重复频次:\\n",df.value_counts())
    # 常用:统计每个年龄出现多少次
    print(df['age'].value_counts())

    七、重复值处理:duplicated () /drop_duplicates ()

  • duplicated():标记重复行,重复返回 True,默认整行完全一致才算重复;可指定列判断重复
  • drop_duplicates():直接删除重复行,返回去重后的新表格
  • # 判断整行是否重复
    print("是否整行重复:\\n",df.duplicated())
    # 只根据age列判断重复,年龄相同即判定重复
    print("age列重复判断:\\n",df.duplicated(subset='age'))
    # 删除所有重复行
    print("去重后数据:\\n",df.drop_duplicates())

    八、随机抽样 sample ()

    从表格随机抽取若干行,做数据随机采样,支持抽 1 行、多行。

    # 默认随机抽1行
    print("随机抽1行:\\n",df.sample())
    # 随机抽3行
    print("随机抽3行:\\n",df.sample(3))

    九、数据排序:sort_index /sort_values/nlargest

    1. sort_index:按照行索引标签排序

    ascending=False 倒序,True 正序

    # 行索引a~f倒序排列
    print("索引降序:\\n",df.sort_index(ascending=False))

    2. sort_values:按列的值排序(最常用)

    支持多列联合排序,可以给不同列设置不同升降序规则

    # 先按score升序,分数相同则age降序
    df_sorted = df.sort_values(by=['score','age'],ascending=[True,False])
    print("多列混合排序:\\n",df_sorted)

    3. nlargest /nsmallest:快速取最值前 N 行

    不用排序再 head,一步拿到分数最高 2 条

    # 取score、age综合最大的2行
    print(df.nlargest(2,columns=['score','age']))
    # 配套:nsmallest取最小N行
    df.nsmallest(2,columns="score")

    十、完整配套练习代码

    import pandas as pd

    df = pd.DataFrame({
    "name":["tom","tom","jack","alice","bob","allen"],
    "age":[15,15,15,20,26,30],
    "score":[60.5,60.5,80,30.6,70,83.5]
    },
    index=['a','b','c','d','e','f'],
    columns=["name","score","age"])

    # 头尾查看
    print("head前3行:\\n",df.head(3))
    print("tail后3行:\\n",df.tail(3))

    # 列选取
    print("\\n单列三种写法")
    print(df['name'])
    print(df.name)
    print(df[['name']])
    print("\\n多列+头尾",df[['name','score']].head(3))

    # 布尔筛选
    print("\\n分数大于70",df[df.score>70])
    print("\\n分数>70且年龄<30",df[(df.score>70)&(df.age<30)])

    # 匹配、空值
    print("\\nisin匹配jack",df.isin(["jack"]))
    print("\\n空值判断",df.isna())

    # 统计指标
    print("\\n总分",df['score'].sum())
    print("平均分",df.score.mean())
    print(df.describe())

    # 计数与去重
    print("\\n有效行数",df.count())
    print("\\n重复判断",df.duplicated())
    print("\\n去重",df.drop_duplicates())

    # 抽样
    print("\\n随机抽样",df.sample(2))

    # 排序
    print("\\n索引倒序",df.sort_index(ascending=False))
    print("\\n多列排序",df.sort_values(by=["score"],ascending=True))
    print("\\n分数最高2行",df.nlargest(2,"score"))

    十一、新手使用总结

  • 预览数据:head/tail;选列用[],多列必须套列表;
  • 精准筛选优先用布尔索引,多条件记住括号 +&/|;
  • 做统计:单列用 sum/mean 等,全表一键用describe;
  • 重复清理:duplicated查重复,drop_duplicates删重复;
  • 排序分两类:按索引 sort_index,按字段 sort_values;取极值用 nlargest;
  • 随机拿数据直接 sample,适合抽样测试。
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » Pandas DataFrame 常用方法全汇总(入门实操博文)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!