pandas-dataframe-常用函数速查手册
💡 可快速发现异常值(如最大值过大)。# 添加一列表示薪资等级else:函数用途head()tail()快速预览info()describe()数据诊断检查缺失fillna()dropna()处理空值query()条件筛选分组统计merge()表连接排序to_csv()保存结果🎯建议:将此文档保存为.ipynb或.py文件,在实际项目中反复练习。
·
以下是 Pandas DataFrame 常用函数的详细实例与用法大全,每个函数都配有:
- ✅ 说明
- ✅ 完整代码示例
- ✅ 输出结果
- ✅ 使用场景
适合初学者系统学习或开发者日常查阅。
📦 准备数据(统一示例数据)
import pandas as pd
import numpy as np
# 创建示例 DataFrame
data = {
'id': [1, 2, 3, 4, 5],
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'age': [25, 30, np.nan, 35, 28],
'salary': [8000, 9000, 7000, 10000, 8500],
'city': ['Beijing', 'Shanghai', 'Beijing', 'Shenzhen', 'Beijing'],
'join_date': ['2022-01-15', '2021-06-10', '2023-03-01', '2020-11-20', '2022-08-05']
}
df = pd.DataFrame(data)
df['join_date'] = pd.to_datetime(df['join_date']) # 转为日期类型
print("原始数据:")
print(df)
输出:
id name age salary city join_date
0 1 Alice 25.0 8000 Beijing 2022-01-15
1 2 Bob 30.0 9000 Shanghai 2021-06-10
2 3 Charlie NaN 7000 Beijing 2023-03-01
3 4 David 35.0 10000 Shenzhen 2020-11-20
4 5 Eva 28.0 8500 Beijing 2022-08-05
1️⃣ head() 和 tail() —— 查看前/后几行
🔹 用法:快速浏览数据
print("前3行:")
print(df.head(3))
print("\n后2行:")
print(df.tail(2))
输出:
前3行:
id name age salary city join_date
0 1 Alice 25.0 8000 Beijing 2022-01-15
1 2 Bob 30.0 9000 Shanghai 2021-06-10
2 3 Charlie NaN 7000 Beijing 2023-03-01
后2行:
id name age salary city join_date
3 4 David 35.0 10000 Shenzhen 2020-11-20
4 5 Eva 28.0 8500 Beijing 2022-08-05
💡 场景:加载大文件时先看几行确认格式是否正确。
2️⃣ info() 和 describe() —— 数据概览
🔹 info():查看结构信息
df.info()
输出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 id 5 non-null int64
1 name 5 non-null object
2 age 4 non-null float64
3 salary 5 non-null int64
4 city 5 non-null object
5 join_date 5 non-null datetime64[ns]
dtypes: float64(1), int64(2), object(2), datetime64[ns](1)
memory usage: 248.0+ bytes
✅ 显示每列非空数量、类型、内存使用情况。
🔹 describe():数值列统计摘要
print(df.describe())
输出:
id age salary
count 5.000000 4.000000 5.000000
mean 3.000000 29.500000 8700.000000
std 1.581139 4.203173 1080.138874
min 1.000000 25.000000 7000.000000
25% 2.000000 26.500000 8000.000000
50% 3.000000 29.000000 8500.000000
75% 4.000000 32.500000 9000.000000
max 5.000000 35.000000 10000.000000
💡 可快速发现异常值(如最大值过大)。
3️⃣ isnull() 和 notnull() —— 缺失值检查
print("缺失值数量:")
print(df.isnull().sum())
print("\n哪些位置是空值?")
print(df.isnull())
输出:
缺失值数量:
id 0
name 0
age 1
salary 0
city 0
join_date 0
dtype: int64
哪些位置是空值?
id name age salary city join_date
0 False False False False False False
1 False False False False False False
2 False False True False False False
3 False False False False False False
4 False False False False False False
4️⃣ dropna() —— 删除缺失值
df_cleaned = df.dropna() # 删除任何含空值的行
print("删除缺失值后:")
print(df_cleaned)
输出:
id name age salary city join_date
0 1 Alice 25.0 8000 Beijing 2022-01-15
1 2 Bob 30.0 9000 Shanghai 2021-06-10
3 4 David 35.0 10000 Shenzhen 2020-11-20
4 5 Eva 28.0 8500 Beijing 2022-08-05
⚠️ 第 2 行(Charlie)被删除了。
5️⃣ fillna() —— 填充缺失值
df_filled = df.fillna({'age': df['age'].mean()}) # 用均值填充 age
print("填充后:")
print(df_filled)
输出:
id name age salary city join_date
0 1 Alice 25.00 8000 Beijing 2022-01-15
1 2 Bob 30.00 9000 Shanghai 2021-06-10
2 3 Charlie 29.50 7000 Beijing 2023-03-01
3 4 David 35.00 10000 Shenzhen 2020-11-20
4 5 Eva 28.00 8500 Beijing 2022-08-05
✅ 也可以填
0、'Unknown'或前向填充method='ffill'
6️⃣ drop_duplicates() —— 去重
假设我们添加重复行:
df_dup = df.append(df.iloc[0], ignore_index=True) # 复制第一行
print("去重前行数:", len(df_dup))
df_unique = df_dup.drop_duplicates()
print("去重后行数:", len(df_unique))
输出:
去重前行数: 6
去重后行数: 5
✅ 支持
subset=['name']按某列去重。
7️⃣ query() —— 条件筛选(推荐可读性好)
high_salary = df.query("salary > 8500")
beijing_staff = df.query("city == 'Beijing'")
young_and_high = df.query("age < 30 and salary > 8000")
print("高薪员工:")
print(high_salary)
输出:
id name age salary city join_date
1 2 Bob 30.0 9000 Shanghai 2021-06-10
3 4 David 35.0 10000 Shenzhen 2020-11-20
4 5 Eva 28.0 8500 Beijing 2022-08-05
💡 比
df[df['salary']>8500]更易读,支持字符串表达式。
8️⃣ loc 和 iloc —— 精准索引
🔹 loc:按标签(行列名)
# 提取第0~2行,'name'到'salary'列
print(df.loc[0:2, 'name':'salary'])
输出:
name age salary
0 Alice 25.0 8000
1 Bob 30.0 9000
2 Charlie NaN 7000
🔹 iloc:按位置(整数索引)
print(df.iloc[1:4, 1:3]) # 第1~3行,第1~2列
输出:
name age
1 Bob 30.0
2 Charlie NaN
3 David 35.0
9️⃣ groupby() + agg() —— 分组聚合
grouped = df.groupby('city').agg({
'age': 'mean',
'salary': ['sum', 'count'],
'id': 'size'
}).round(2)
print("按城市分组统计:")
print(grouped)
输出:
age salary id
mean sum count size
city
Beijing 27.33 23500 3 3
Shanghai 30.00 9000 1 1
Shenzhen 35.00 10000 1 1
✅
size()统计所有行(含 NaN),count()只统计非空。
🔟 merge() —— 数据合并(类似 SQL JOIN)
# 另一个表:部门信息
dept = pd.DataFrame({
'id': [1, 2, 3],
'department': ['HR', 'Tech', 'Finance']
})
merged = pd.merge(df, dept, on='id', how='left')
print("合并后:")
print(merged)
输出:
id name age salary city join_date department
0 1 Alice 25.0 8000 Beijing 2022-01-15 HR
1 2 Bob 30.0 9000 Shanghai 2021-06-10 Tech
2 3 Charlie NaN 7000 Beijing 2023-03-01 Finance
3 4 David 35.0 10000 Shenzhen 2020-11-20 NaN
4 5 Eva 28.0 8500 Beijing 2022-08-05 NaN
how='left':保留左表所有行。
🔁 apply() —— 自定义函数应用
# 添加一列表示薪资等级
def salary_level(sal):
if sal >= 10000:
return 'High'
elif sal >= 8000:
return 'Medium'
else:
return 'Low'
df['level'] = df['salary'].apply(salary_level)
print(df[['name', 'salary', 'level']])
输出:
name salary level
0 Alice 8000 Medium
1 Bob 9000 Medium
2 Charlie 7000 Low
3 David 10000 High
4 Eva 8500 Medium
🗂️ sort_values() —— 排序
sorted_df = df.sort_values(by='salary', ascending=False)
print("按薪资降序排列:")
print(sorted_df)
输出:
id name age salary city join_date level
3 4 David 35.0 10000 Shenzhen 2020-11-20 High
1 2 Bob 30.0 9000 Shanghai 2021-06-10 Medium
4 5 Eva 28.0 8500 Beijing 2022-08-05 Medium
0 1 Alice 25.0 8000 Beijing 2022-01-15 Medium
2 3 Charlie NaN 7000 Beijing 2023-03-01 Low
💾 to_csv() / to_excel() —— 保存数据
df.to_csv('output.csv', index=False)
df.to_excel('output.xlsx', sheet_name='员工数据', index=False)
print("✅ 数据已保存")
index=False避免保存多余的索引列。
🌟 实用技巧合集
| 技巧 | 示例 |
|---|---|
| 查唯一值 | df['city'].unique() → ['Beijing' 'Shanghai' 'Shenzhen'] |
| 值频次统计 | df['city'].value_counts() |
| 字符串处理 | df['name'].str.upper() |
| 时间提取年份 | df['join_date'].dt.year |
| 重命名列 | df.rename(columns={'name': '姓名'}) |
| 数据类型转换 | df['age'] = df['age'].astype('int') |
print("各城市人数:")
print(df['city'].value_counts())
print("入职年份:")
print(df['join_date'].dt.year.tolist())
输出:
各城市人数:
Beijing 3
Shenzhen 1
Shanghai 1
Name: city, dtype: int64
入职年份:
[2022, 2021, 2023, 2020, 2022]
✅ 总结:高频函数清单
| 函数 | 用途 |
|---|---|
head() / tail() |
快速预览 |
info() / describe() |
数据诊断 |
isnull().sum() |
检查缺失 |
fillna() / dropna() |
处理空值 |
query() |
条件筛选 |
groupby().agg() |
分组统计 |
merge() |
表连接 |
sort_values() |
排序 |
to_csv() |
保存结果 |
🎯 建议:将此文档保存为 .ipynb 或 .py 文件,在实际项目中反复练习。
更多推荐


所有评论(0)