前言
使用 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 ()
只看局部行,不用打印全表,适合快速预览数据。
# 查看前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[条件表达式],支持单条件、多条件组合
规则
# 单条件:分数大于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 ()
# 各列有效数据行数
print("每一列非缺失值个数:\\n",df.count())
# 全表行重复频次
print("全表重复频次:\\n",df.value_counts())
# 常用:统计每个年龄出现多少次
print(df['age'].value_counts())
七、重复值处理:duplicated () /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"))
网硕互联帮助中心




评论前必须登录!
注册