一、读取数据
| 函数 | 说明 |
|---|---|
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 的组合用法。