Pandas入门教程(十六):常用函数速查手册——读写、清洗、选择、排序、分组与统计

一、读取数据
函数 说明
pd.read_csv(filename) 读取 CSV 文件
pd.read_excel(filename) 读取 Excel 文件
pd.read_sql(query, connection_object) 从 SQL 数据库读取数据
pd.read_json(json_string) 从 JSON 字符串中读取数据
pd.read_html(url) 从 HTML 页面中读取数据

实例:

python

复制代码
import pandas as pd

# 从 CSV 文件中读取数据
df = pd.read_csv('data.csv')

# 从 Excel 文件中读取数据
df = pd.read_excel('data.xlsx')

# 从 SQL 数据库中读取数据
import sqlite3
conn = sqlite3.connect('database.db')
df = pd.read_sql('SELECT * FROM table_name', conn)

# 从 JSON 字符串中读取数据
json_string = '{"name": "John", "age": 30, "city": "New York"}'
df = pd.read_json(json_string)

# 从 HTML 页面中读取数据
url = 'https://www.runoob.com'
dfs = pd.read_html(url)
df = dfs[0]   # 选择第一个数据框

读取函数速查:

数据源 读取函数 写入函数
CSV read_csv to_csv
Excel read_excel to_excel
SQL read_sql to_sql
JSON read_json to_json
HTML read_html to_html
Parquet read_parquet to_parquet
Feather read_feather to_feather
Pickle read_pickle to_pickle
二、查看数据
函数 说明
df.head(n) 显示前 n 行数据
df.tail(n) 显示后 n 行数据
df.info() 显示数据的信息,包括列名、数据类型、缺失值等
df.describe() 显示数据的基本统计信息,包括均值、方差、最大值、最小值等
df.shape 显示数据的行数和列数

实例:

python

复制代码
# 显示前五行数据
df.head()

# 显示后五行数据
df.tail()

# 显示数据信息
df.info()

# 显示基本统计信息
df.describe()

# 显示数据的行数和列数
df.shape

完整示例:

python

复制代码
import pandas as pd

data = [
    {"name": "Google", "likes": 25, "url": "https://www.google.com"},
    {"name": "Runoob", "likes": 30, "url": "https://www.runoob.com"},
    {"name": "Taobao", "likes": 35, "url": "https://www.taobao.com"}
]

df = pd.DataFrame(data)
# 显示前两行数据
print(df.head(2))
# 显示最后一行数据
print(df.tail(1))

输出结果:

text

复制代码
     name  likes                     url
0  Google     25  https://www.google.com
1  Runoob     30  https://www.runoob.com
     name  likes                     url
2  Taobao     35  https://www.taobao.com

查看数据方法对比:

方法 返回内容 适用场景
head() / tail() 前/后 n 行 快速预览
info() 列名、类型、非空数 检查数据完整性
describe() 数值列统计摘要 了解分布
shape (行数, 列数) 快速了解规模
dtypes 每列数据类型 检查类型是否正确
三、数据清洗
函数 说明
df.dropna() 删除包含缺失值的行或列
df.fillna(value) 将缺失值替换为指定的值
df.replace(old_value, new_value) 将指定值替换为新值
df.duplicated() 检查是否有重复的数据
df.drop_duplicates() 删除重复的数据

实例:

python

复制代码
# 删除包含缺失值的行或列
df.dropna()

# 将缺失值替换为指定的值
df.fillna(0)

# 将指定值替换为新值
df.replace('old_value', 'new_value')

# 检查是否有重复的数据
df.duplicated()

# 删除重复的数据
df.drop_duplicates()

常用参数:

函数 常用参数 说明
dropna() axis、how、subset、inplace 删除缺失值
fillna() value、method、inplace 填充缺失值
replace() to_replace、value 值替换
drop_duplicates() subset、keep、inplace 去重
四、数据选择和切片
函数 说明
df[column_name] 选择指定的列
df.loc[row_index, column_name] 通过标签选择数据
df.iloc[row_index, column_index] 通过位置选择数据
df.ix[row_index, column_name] 通过标签或位置选择数据(已弃用)
df.filter(items=[column_name1, column_name2]) 选择指定的列
df.filter(regex='regex') 选择列名匹配正则表达式的列
df.sample(n) 随机选择 n 行数据

实例:

python

复制代码
# 选择指定的列
df['column_name']

# 通过标签选择数据
df.loc[row_index, column_name]

# 通过位置选择数据
df.iloc[row_index, column_index]

# 选择指定的列
df.filter(items=['column_name1', 'column_name2'])

# 选择列名匹配正则表达式的列
df.filter(regex='regex')

# 随机选择 n 行数据
df.sample(n=5)

注意: df.ix 在新版 Pandas 中已弃用,请使用 loc(标签)或 iloc(位置)。

loc 与 iloc 对比:

方法 索引方式 示例
loc[] 标签索引 df.loc['day2', 'name']
iloc[] 位置索引 df.iloc[1, 0]
at[] 单个元素(标签) df.at['day2', 'name']
iat[] 单个元素(位置) df.iat[1, 0]
五、数据排序
函数 说明
df.sort_values(column_name) 按照指定列的值排序
df.sort_values([column_name1, column_name2], ascending=[True, False]) 按照多个列的值排序
df.sort_index() 按照索引排序

实例:

python

复制代码
# 按照指定列的值排序
df.sort_values('column_name')

# 按照多个列的值排序
df.sort_values(['column_name1', 'column_name2'], ascending=[True, False])

# 按照索引排序
df.sort_index()

排序参数速查:

参数 说明 示例
by 排序列名 by='score'
ascending 是否升序 ascending=False
na_position 缺失值位置 na_position='first'
inplace 是否原地修改 inplace=True
六、数据分组和聚合
函数 说明
df.groupby(column_name) 按照指定列进行分组
df.aggregate(function_name) 对分组后的数据进行聚合操作
df.pivot_table(values, index, columns, aggfunc) 生成透视表

实例:

python

复制代码
# 按照指定列进行分组
df.groupby('column_name')

# 对分组后的数据进行聚合操作
df.aggregate('function_name')

# 生成透视表
df.pivot_table(values='value', index='index_column',
               columns='column_name', aggfunc='function_name')

常用聚合函数:

函数 说明
mean() 平均值
sum() 求和
count() 计数
min() / max() 最小/最大值
median() 中位数
std() 标准差
var() 方差
agg(['mean', 'sum']) 多个聚合同时计算

groupby 配合 agg 示例:

python

复制代码
# 按性别分组,计算年龄和成绩的平均值
df.groupby('性别').agg({'年龄': 'mean', '成绩': 'mean'})
七、数据合并
函数 说明
pd.concat([df1, df2]) 将多个数据框按照行或列进行合并
pd.merge(df1, df2, on=column_name) 按照指定列将两个数据框进行合并

实例:

python

复制代码
# 将多个数据框按照行或列进行合并
df = pd.concat([df1, df2])

# 按照指定列将两个数据框进行合并
df = pd.merge(df1, df2, on='column_name')

concat 与 merge 对比:

对比项 pd.concat() pd.merge()
合并方式 按行/列拼接 按关联键合并
类比 SQL UNION JOIN
主要参数 axis、ignore_index on、how
适用场景 结构相同的表拼接 有关联关系的表连接

merge 的 how 参数:

how 值 类比 SQL 说明
'inner'(默认) INNER JOIN 两表都有的键
'left' LEFT JOIN 保留左表所有行
'right' RIGHT JOIN 保留右表所有行
'outer' FULL OUTER JOIN 保留两表所有行
八、数据选择和过滤
函数 说明
df.loc[row_indexer, column_indexer] 按标签选择行和列
df.iloc[row_indexer, column_indexer] 按位置选择行和列
df[df['column_name'] > value] 选择列中满足条件的行
df.query('column_name > value') 使用字符串表达式选择列中满足条件的行

实例:

python

复制代码
# 条件过滤
df[df['score'] > 80]

# query 写法(更简洁)
df.query('score > 80')

# 多条件
df[(df['score'] > 80) & (df['gender'] == 'male')]
df.query('score > 80 and gender == "male"')

query 的优势: 语法接近自然语言,链式调用时可读性更好。

九、数据统计和描述
函数 说明
df.describe() 计算基本统计信息,如均值、标准差、最小值、最大值等
df.mean() 计算每列的平均值
df.median() 计算每列的中位数
df.mode() 计算每列的众数
df.count() 计算每列非缺失值的数量

实例:

python

复制代码
df.describe()
df.mean()
df.median()
df.mode()
df.count()

统计函数速查:

函数 说明
describe() 综合统计摘要
mean() 均值
median() 中位数
mode() 众数
sum() 求和
count() 非空计数
std() 标准差
var() 方差
corr() 相关系数矩阵
value_counts() 各值出现次数
十、综合案例:JSON 数据处理全流程

假设我们有如下的 JSON 数据,数据保存到 data.json 文件:

json

复制代码
[
  {"name": "Alice", "age": 25, "gender": "female", "score": 80},
  {"name": "Bob", "age": null, "gender": "male", "score": 90},
  {"name": "Charlie", "age": 30, "gender": "male", "score": null},
  {"name": "David", "age": 35, "gender": "male", "score": 70}
]

我们可以使用 Pandas 读取 JSON 数据,并进行数据清洗和处理、数据选择和过滤、数据统计和描述等操作:

python

复制代码
import pandas as pd

# 读取 JSON 数据
df = pd.read_json('data.json')

# 删除缺失值
df = df.dropna()

# 用指定的值填充缺失值
df = df.fillna({'age': 0, 'score': 0})

# 重命名列名
df = df.rename(columns={'name': '姓名', 'age': '年龄',
                        'gender': '性别', 'score': '成绩'})

# 按成绩排序
df = df.sort_values(by='成绩', ascending=False)

# 按性别分组并计算平均年龄和成绩
grouped = df.groupby('性别').agg({'年龄': 'mean', '成绩': 'mean'})

# 选择成绩大于等于 90 的行,并只保留姓名和成绩两列
df = df.loc[df['成绩'] >= 90, ['姓名', '成绩']]

# 计算每列的基本统计信息
stats = df.describe()

# 计算每列的平均值
mean = df.mean()

# 计算每列的中位数
median = df.median()

# 计算每列的众数
mode = df.mode()

# 计算每列非缺失值的数量
count = df.count()

输出结果:

text

复制代码
# df
   姓名  年龄 性别  成绩
1  Bob   0  male  90

# grouped
             年龄  成绩
性别
female  25.000000  80
male    27.500000  80

# stats
         成绩
count   1.0
mean   90.0
std     NaN
min    90.0
25%    90.0
50%    90.0
75%    90.0
max    90.0

# mean
成绩    90.0
dtype: float64

# median
成绩    90.0
dtype: float64

# mode
    姓名    成绩
0  Bob  90.0

# count
姓名    1
成绩    1
dtype: int64

案例流程解析:

步骤 操作 方法
1 读取数据 read_json
2 清洗缺失 dropna / fillna
3 重命名列 rename
4 排序 sort_values
5 分组聚合 groupby + agg
6 条件过滤 loc
7 统计描述 describe、mean、median、mode、count
十一、函数分类速查总表
十二、常见问题排查
问题现象 可能原因 解决方案
df.ix 报错 方法已弃用 改用 loc 或 iloc
groupby 结果无数据 分组列有缺失值 先 dropna 或 fillna
merge 后行数暴增 关联键有重复值 检查键的唯一性
sort_values 不生效 未赋值或未加 inplace df = df.sort_values(...)
fillna 对整列无效 列类型不匹配 检查 dtype,必要时 astype
query 报语法错误 列名含特殊字符 用反引号包裹列名
concat 后索引重复 未重置索引 ignore_index=True
十三、小结

本篇系统整理了 Pandas 最常用的函数,按九大类组织:

  • 读取数据 :read_csv、read_excel、read_sql、read_json、read_html。

  • 查看数据 :head、tail、info、describe、shape。

  • 数据清洗 :dropna、fillna、replace、duplicated、drop_duplicates。

  • 选择切片 :[]、loc、iloc、filter、sample。

  • 排序 :sort_values、sort_index。

  • 分组聚合 :groupby、agg、pivot_table。

  • 合并 :concat(拼接)、merge(关联)。

  • 过滤 :条件筛选、query。

  • 统计描述 :describe、mean、median、mode、count。

记忆要点:

场景 首选方法
按标签选 loc
按位置选 iloc
条件筛选 query 或布尔索引
分组统计 groupby().agg()
表拼接 concat
表关联 merge
去重 drop_duplicates
缺失值 fillna / dropna

这份速查手册适合日常开发时快速查阅。下一篇我们将学习 Pandas 数据排序与聚合 ,深入掌握 sort_values、groupby、agg、pivot_table 的组合用法。

相关推荐
quantdash_cc14 小时前
个人开发者用 QuantDash 读取港股行情:00700.HK 的 Python 函数封装与校验实践
python·数据分析·pandas·量化交易·股票数据·quantdash
databook1 天前
Pandas 与 Polars:语法、性能和资源占用方面的对比
python·数据分析·pandas
桑年1 天前
四、Pandas数据处理
人工智能·python·线性代数·pandas·数据可视化·数据处理
第九序言T1 天前
Python 数据处理进阶(二十四)把脚本变成工具:argparse、logging 与定时任务
python·自动化·pandas
第九序言T1 天前
Python 数据处理进阶(二十二)用 Pandas 做一次完整的用户行为分析
开发语言·python·数据分析·pandas
第九序言T1 天前
Python 数据处理进阶(二十一)相关性与分组对比:数据里藏着什么关系
大数据·人工智能·python·数据分析·pandas
第九序言T3 天前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
quantdash_cc3 天前
如何验证历史行情的交易日期是否完整覆盖研究区间?
python·数据分析·pandas·量化交易·股票数据·quantdash
quantdash_cc3 天前
ETF 行情数据清洗实战:字段语义拆解、标的池整理与五个校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash