Pandas 常用函数
Pandas 提供了丰富的函数来处理和分析数据。掌握这些常用函数是高效使用 Pandas 的关键。本章将详细介绍最重要和最常用的 Pandas 函数,帮助你在日常数据分析工作中游刃有余。
1. 数据查看和信息函数
1.1 基本信息查看
python
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# 创建示例数据
np.random.seed(42)
data = {
'name': ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十'],
'age': [25, 30, 35, 28, 32, 27, 29, 31],
'department': ['IT', 'HR', 'Finance', 'IT', 'Marketing', 'HR', 'IT', 'Finance'],
'salary': [8000, 7000, 9500, 8500, 7500, 6800, 9000, 9200],
'join_date': pd.date_range('2020-01-01', periods=8, freq='3M'),
'performance': np.random.choice(['优秀', '良好', '一般'], 8),
'bonus': np.random.randint(1000, 5000, 8)
}
df = pd.DataFrame(data)
print("示例数据:")
print(df)
# 1. head() - 查看前几行
print("\n前3行数据:")
print(df.head(3))
# 2. tail() - 查看后几行
print("\n后3行数据:")
print(df.tail(3))
# 3. info() - 数据基本信息
print("\n数据信息:")
print(df.info())
# 4. describe() - 统计描述
print("\n数值列统计描述:")
print(df.describe())
# 5. shape - 数据形状
print(f"\n数据形状: {df.shape}")
# 6. columns - 列名
print(f"\n列名: {df.columns.tolist()}")
# 7. dtypes - 数据类型
print("\n数据类型:")
print(df.dtypes)
# 8. index - 索引信息
print(f"\n索引: {df.index}")1.2 数据概览函数
python
# 1. sample() - 随机采样
print("随机采样3行:")
print(df.sample(3))
# 2. nunique() - 唯一值数量
print("\n每列唯一值数量:")
print(df.nunique())
# 3. value_counts() - 值计数
print("\n部门分布:")
print(df['department'].value_counts())
# 4. unique() - 唯一值
print("\n唯一部门:")
print(df['department'].unique())
# 5. memory_usage() - 内存使用
print("\n内存使用情况:")
print(df.memory_usage(deep=True))2. 数据选择和过滤函数
2.1 条件选择
python
# 1. query() - 查询表达式
print("年龄大于30的员工:")
result1 = df.query('age > 30')
print(result1[['name', 'age', 'department']])
print("\nIT部门且薪资大于8000的员工:")
result2 = df.query('department == "IT" and salary > 8000')
print(result2[['name', 'department', 'salary']])
# 2. where() - 条件替换
print("\n将薪资低于8000的设为NaN:")
salary_filtered = df['salary'].where(df['salary'] >= 8000)
print(salary_filtered)
# 3. mask() - 条件掩码(与where相反)
print("\n掩码薪资高于8000的值:")
salary_masked = df['salary'].mask(df['salary'] > 8000)
print(salary_masked)
# 4. isin() - 成员检查
print("\nIT和HR部门的员工:")
it_hr_employees = df[df['department'].isin(['IT', 'HR'])]
print(it_hr_employees[['name', 'department']])
# 5. between() - 范围选择
print("\n年龄在28-32之间的员工:")
age_range = df[df['age'].between(28, 32)]
print(age_range[['name', 'age']])2.2 位置和标签选择
python
# 1. loc[] - 标签选择
print("使用loc选择特定行和列:")
print(df.loc[0:2, ['name', 'age', 'salary']])
# 2. iloc[] - 位置选择
print("\n使用iloc选择位置:")
print(df.iloc[0:3, 1:4])
# 3. at[] - 单个值选择(标签)
print(f"\n第一个员工的姓名: {df.at[0, 'name']}")
# 4. iat[] - 单个值选择(位置)
print(f"第一行第二列的值: {df.iat[0, 1]}")
# 5. filter() - 按名称过滤
print("\n包含'a'的列:")
filtered_cols = df.filter(regex='a')
print(filtered_cols.columns.tolist())
# 按列名过滤
print("\n选择特定列:")
selected_cols = df.filter(['name', 'salary', 'department'])
print(selected_cols.head(3))3. 数据统计和聚合函数
3.1 基本统计函数
python
# 1. sum() - 求和
print("薪资总和:")
print(f"总薪资: {df['salary'].sum():,}")
# 2. mean() - 平均值
print(f"\n平均薪资: {df['salary'].mean():.2f}")
# 3. median() - 中位数
print(f"薪资中位数: {df['salary'].median()}")
# 4. std() - 标准差
print(f"薪资标准差: {df['salary'].std():.2f}")
# 5. var() - 方差
print(f"薪资方差: {df['salary'].var():.2f}")
# 6. min() / max() - 最小值/最大值
print(f"\n最低薪资: {df['salary'].min()}")
print(f"最高薪资: {df['salary'].max()}")
# 7. quantile() - 分位数
print("\n薪资分位数:")
print(df['salary'].quantile([0.25, 0.5, 0.75]))
# 8. count() - 非空值计数
print(f"\n非空薪资记录数: {df['salary'].count()}")
# 9. mode() - 众数
print("\n部门众数:")
print(df['department'].mode())3.2 聚合函数
python
# 1. agg() / aggregate() - 自定义聚合
print("薪资多种统计:")
salary_stats = df['salary'].agg(['mean', 'std', 'min', 'max'])
print(salary_stats)
# 多列聚合
print("\n多列聚合:")
multi_agg = df.agg({
'salary': ['mean', 'sum'],
'age': ['mean', 'min', 'max'],
'bonus': 'sum'
})
print(multi_agg)
# 2. apply() - 应用函数
print("\n应用自定义函数:")
# 计算薪资等级
def salary_grade(salary):
if salary >= 9000:
return '高'
elif salary >= 7500:
return '中'
else:
return '低'
df['salary_grade'] = df['salary'].apply(salary_grade)
print(df[['name', 'salary', 'salary_grade']])
# 3. map() - 映射值
print("\n部门映射:")
dept_mapping = {'IT': '信息技术', 'HR': '人力资源', 'Finance': '财务', 'Marketing': '市场'}
df['dept_chinese'] = df['department'].map(dept_mapping)
print(df[['name', 'department', 'dept_chinese']].head())4. 数据排序函数
4.1 排序操作
python
# 1. sort_values() - 按值排序
print("按薪资降序排列:")
sorted_by_salary = df.sort_values('salary', ascending=False)
print(sorted_by_salary[['name', 'salary']].head())
# 多列排序
print("\n按部门和薪资排序:")
multi_sorted = df.sort_values(['department', 'salary'], ascending=[True, False])
print(multi_sorted[['name', 'department', 'salary']])
# 2. sort_index() - 按索引排序
print("\n按索引倒序:")
index_sorted = df.sort_index(ascending=False)
print(index_sorted.head(3))
# 3. nlargest() / nsmallest() - 最大/最小的n个值
print("\n薪资最高的3人:")
top3_salary = df.nlargest(3, 'salary')
print(top3_salary[['name', 'salary']])
print("\n年龄最小的3人:")
youngest3 = df.nsmallest(3, 'age')
print(youngest3[['name', 'age']])4.2 排名函数
python
# 1. rank() - 排名
print("薪资排名:")
df['salary_rank'] = df['salary'].rank(ascending=False)
print(df[['name', 'salary', 'salary_rank']].sort_values('salary_rank'))
# 不同排名方法
print("\n不同排名方法:")
ranking_methods = ['average', 'min', 'max', 'first', 'dense']
for method in ranking_methods:
df[f'rank_{method}'] = df['salary'].rank(method=method, ascending=False)
print(df[['name', 'salary'] + [f'rank_{m}' for m in ranking_methods]])5. 数据分组函数
5.1 GroupBy操作
python
# 1. groupby() - 分组
print("按部门分组统计:")
dept_stats = df.groupby('department').agg({
'salary': ['mean', 'sum', 'count'],
'age': 'mean',
'bonus': 'sum'
})
print(dept_stats)
# 2. 分组应用函数
print("\n各部门薪资排名:")
def rank_in_group(group):
group['dept_salary_rank'] = group['salary'].rank(ascending=False)
return group
df_with_dept_rank = df.groupby('department').apply(rank_in_group)
print(df_with_dept_rank[['name', 'department', 'salary', 'dept_salary_rank']])
# 3. transform() - 组内变换
print("\n部门平均薪资:")
df['dept_avg_salary'] = df.groupby('department')['salary'].transform('mean')
df['salary_vs_dept_avg'] = df['salary'] - df['dept_avg_salary']
print(df[['name', 'department', 'salary', 'dept_avg_salary', 'salary_vs_dept_avg']])5.2 分组统计函数
python
# 1. size() - 组大小
print("各部门人数:")
dept_size = df.groupby('department').size()
print(dept_size)
# 2. count() - 非空值计数
print("\n各部门非空值计数:")
dept_count = df.groupby('department').count()
print(dept_count)
# 3. nunique() - 组内唯一值数量
print("\n各部门绩效种类数:")
perf_variety = df.groupby('department')['performance'].nunique()
print(perf_variety)
# 4. first() / last() - 第一个/最后一个值
print("\n各部门第一个员工:")
first_employee = df.groupby('department').first()
print(first_employee[['name', 'salary']])6. 数据合并和连接函数
6.1 合并操作
python
# 创建额外数据用于演示
dept_info = pd.DataFrame({
'department': ['IT', 'HR', 'Finance', 'Marketing'],
'manager': ['张经理', '李经理', '王经理', '赵经理'],
'budget': [1000000, 500000, 800000, 600000]
})
project_data = pd.DataFrame({
'name': ['张三', '李四', '王五', '张三'],
'project': ['项目A', '项目B', '项目C', '项目D'],
'hours': [40, 35, 45, 30]
})
print("部门信息:")
print(dept_info)
print("\n项目数据:")
print(project_data)
# 1. merge() - 合并
print("\n员工与部门信息合并:")
merged_df = pd.merge(df, dept_info, on='department', how='left')
print(merged_df[['name', 'department', 'manager', 'budget']].head())
# 2. join() - 连接
print("\n使用join连接:")
df_indexed = df.set_index('name')
project_indexed = project_data.set_index('name')
joined_df = df_indexed.join(project_indexed, how='left')
print(joined_df[['department', 'salary', 'project', 'hours']].head())
# 3. concat() - 拼接
print("\n垂直拼接:")
df1 = df.head(3)
df2 = df.tail(3)
concatenated = pd.concat([df1, df2], ignore_index=True)
print(concatenated[['name', 'department']])
# 水平拼接
print("\n水平拼接:")
horizontal_concat = pd.concat([df[['name', 'age']], df[['salary', 'department']]], axis=1)
print(horizontal_concat.head(3))6.2 数据重塑函数
python
# 1. pivot() - 透视表
print("部门-绩效透视表:")
pivot_table = df.pivot_table(values='salary', index='department',
columns='performance', aggfunc='mean')
print(pivot_table)
# 2. melt() - 宽表转长表
print("\n宽表转长表:")
wide_df = df[['name', 'salary', 'bonus']]
melted_df = pd.melt(wide_df, id_vars=['name'],
value_vars=['salary', 'bonus'],
var_name='income_type', value_name='amount')
print(melted_df.head())
# 3. stack() / unstack() - 堆叠/反堆叠
print("\n堆叠操作:")
stacked = df.set_index(['name', 'department'])[['salary', 'bonus']].stack()
print(stacked.head())
print("\n反堆叠操作:")
unstacked = stacked.unstack()
print(unstacked.head())7. 字符串处理函数
7.1 字符串操作
python
# 创建包含字符串的数据
string_data = pd.DataFrame({
'name': ['张三', '李四', '王五六', '赵 六', 'JOHN', 'jane'],
'email': ['zhang@company.com', 'li@COMPANY.COM', 'wang@company.cn',
'zhao@company.com', 'john@company.com', 'jane@company.com'],
'phone': ['138-0013-8000', '139 0013 9000', '13700137000',
'136-0013-6000', '135-0013-5000', '134-0013-4000']
})
print("字符串数据:")
print(string_data)
# 1. str.len() - 字符串长度
print("\n姓名长度:")
string_data['name_length'] = string_data['name'].str.len()
print(string_data[['name', 'name_length']])
# 2. str.upper() / str.lower() - 大小写转换
print("\n邮箱小写:")
string_data['email_lower'] = string_data['email'].str.lower()
print(string_data[['email', 'email_lower']])
# 3. str.strip() - 去除空白
print("\n去除姓名空白:")
string_data['name_stripped'] = string_data['name'].str.strip()
print(string_data[['name', 'name_stripped']])
# 4. str.replace() - 替换
print("\n统一电话格式:")
string_data['phone_clean'] = string_data['phone'].str.replace(r'[\s-]', '', regex=True)
print(string_data[['phone', 'phone_clean']])
# 5. str.contains() - 包含检查
print("\n包含'公司'域名的邮箱:")
company_emails = string_data[string_data['email'].str.contains('company')]
print(company_emails['email'])
# 6. str.startswith() / str.endswith() - 开始/结束检查
print("\n以'张'开头的姓名:")
zhang_names = string_data[string_data['name'].str.startswith('张')]
print(zhang_names['name'])
# 7. str.split() - 分割
print("\n分割邮箱:")
email_parts = string_data['email'].str.split('@', expand=True)
email_parts.columns = ['username', 'domain']
print(email_parts)7.2 正则表达式函数
python
# 1. str.extract() - 提取模式
print("提取邮箱用户名:")
username_pattern = r'([^@]+)@'
usernames = string_data['email'].str.extract(username_pattern)
print(usernames)
# 2. str.findall() - 查找所有匹配
print("\n查找所有数字:")
digits = string_data['phone'].str.findall(r'\d+')
print(digits)
# 3. str.match() - 匹配模式
print("\n匹配中文姓名:")
chinese_pattern = r'^[\u4e00-\u9fa5]+$'
chinese_names = string_data[string_data['name'].str.match(chinese_pattern)]
print(chinese_names['name'])8. 时间日期函数
8.1 日期时间操作
python
# 创建时间序列数据
date_data = pd.DataFrame({
'date': pd.date_range('2023-01-01', periods=10, freq='D'),
'sales': np.random.randint(100, 1000, 10),
'temperature': np.random.normal(20, 5, 10)
})
print("时间序列数据:")
print(date_data)
# 1. dt.year, dt.month, dt.day - 提取日期组件
print("\n提取日期组件:")
date_data['year'] = date_data['date'].dt.year
date_data['month'] = date_data['date'].dt.month
date_data['day'] = date_data['date'].dt.day
date_data['weekday'] = date_data['date'].dt.day_name()
print(date_data[['date', 'year', 'month', 'day', 'weekday']].head())
# 2. dt.strftime() - 格式化日期
print("\n格式化日期:")
date_data['date_formatted'] = date_data['date'].dt.strftime('%Y年%m月%d日')
print(date_data[['date', 'date_formatted']].head())
# 3. 日期运算
print("\n日期运算:")
date_data['days_from_start'] = (date_data['date'] - date_data['date'].min()).dt.days
date_data['future_date'] = date_data['date'] + pd.Timedelta(days=30)
print(date_data[['date', 'days_from_start', 'future_date']].head())8.2 时间序列重采样
python
# 创建更长的时间序列
long_ts = pd.DataFrame({
'datetime': pd.date_range('2023-01-01', periods=100, freq='H'),
'value': np.random.randn(100).cumsum()
})
long_ts.set_index('datetime', inplace=True)
print("原始小时数据(前5行):")
print(long_ts.head())
# 1. resample() - 重采样
print("\n按天重采样(平均值):")
daily_avg = long_ts.resample('D').mean()
print(daily_avg.head())
print("\n按天重采样(多种统计):")
daily_stats = long_ts.resample('D').agg(['mean', 'std', 'min', 'max'])
print(daily_stats.head())
# 2. rolling() - 滚动窗口
print("\n24小时滚动平均:")
long_ts['rolling_24h'] = long_ts['value'].rolling(window=24).mean()
print(long_ts[['value', 'rolling_24h']].head(25))9. 缺失值处理函数
9.1 缺失值检测
python
# 创建包含缺失值的数据
data_with_na = df.copy()
data_with_na.loc[1, 'salary'] = np.nan
data_with_na.loc[3, 'age'] = np.nan
data_with_na.loc[5, 'bonus'] = np.nan
print("包含缺失值的数据:")
print(data_with_na[['name', 'age', 'salary', 'bonus']])
# 1. isnull() / isna() - 检测缺失值
print("\n缺失值检测:")
print(data_with_na.isnull().sum())
# 2. notnull() / notna() - 检测非缺失值
print("\n非缺失值统计:")
print(data_with_na.notnull().sum())
# 3. dropna() - 删除缺失值
print("\n删除包含缺失值的行:")
no_na_rows = data_with_na.dropna()
print(f"原始行数: {len(data_with_na)}, 删除后行数: {len(no_na_rows)}")
# 删除特定列的缺失值
print("\n删除薪资缺失的行:")
no_salary_na = data_with_na.dropna(subset=['salary'])
print(f"删除薪资缺失后行数: {len(no_salary_na)}")9.2 缺失值填充
python
# 1. fillna() - 填充缺失值
print("用0填充缺失值:")
filled_zero = data_with_na.fillna(0)
print(filled_zero[['name', 'age', 'salary', 'bonus']])
# 用不同值填充不同列
print("\n用不同策略填充:")
fill_values = {
'age': data_with_na['age'].mean(),
'salary': data_with_na['salary'].median(),
'bonus': 0
}
filled_custom = data_with_na.fillna(fill_values)
print(filled_custom[['name', 'age', 'salary', 'bonus']])
# 2. ffill() / bfill() - 前向/后向填充
print("\n前向填充:")
ffilled = data_with_na.fillna(method='ffill')
print(ffilled[['name', 'age', 'salary', 'bonus']])
# 3. interpolate() - 插值填充
print("\n线性插值填充:")
interpolated = data_with_na[['age', 'salary', 'bonus']].interpolate()
print(interpolated)10. 数据类型转换函数
10.1 类型转换
python
# 1. astype() - 类型转换
print("数据类型转换:")
type_converted = df.copy()
type_converted['age'] = type_converted['age'].astype('float64')
type_converted['department'] = type_converted['department'].astype('category')
print(type_converted.dtypes)
# 2. to_numeric() - 转换为数值
string_numbers = pd.Series(['1', '2', '3.5', 'abc', '5'])
print("\n字符串转数值:")
numeric_converted = pd.to_numeric(string_numbers, errors='coerce')
print(numeric_converted)
# 3. to_datetime() - 转换为日期时间
date_strings = pd.Series(['2023-01-01', '2023/02/15', '2023-03-20', 'invalid'])
print("\n字符串转日期:")
date_converted = pd.to_datetime(date_strings, errors='coerce')
print(date_converted)
# 4. to_categorical() - 转换为分类
print("\n转换为分类类型:")
categorical_dept = pd.Categorical(df['department'])
print(f"分类: {categorical_dept.categories}")
print(f"编码: {categorical_dept.codes}")11. 实用工具函数
11.1 数据验证和清理
python
# 1. duplicated() - 检测重复
print("检测重复值:")
duplicates = df.duplicated()
print(f"重复行数: {duplicates.sum()}")
# 2. drop_duplicates() - 删除重复
print("\n删除重复值:")
no_duplicates = df.drop_duplicates()
print(f"原始行数: {len(df)}, 去重后行数: {len(no_duplicates)}")
# 3. reset_index() - 重置索引
print("\n重置索引:")
reset_df = df.reset_index(drop=True)
print(reset_df.index)
# 4. set_index() - 设置索引
print("\n设置姓名为索引:")
name_indexed = df.set_index('name')
print(name_indexed.head(3))11.2 数据导入导出
python
# 1. to_csv() - 导出CSV
df.to_csv('employees.csv', index=False, encoding='utf-8')
print("数据已导出到 employees.csv")
# 2. to_excel() - 导出Excel
df.to_excel('employees.xlsx', index=False, sheet_name='员工数据')
print("数据已导出到 employees.xlsx")
# 3. to_json() - 导出JSON
df.to_json('employees.json', orient='records', force_ascii=False, indent=2)
print("数据已导出到 employees.json")
# 4. to_dict() - 转换为字典
print("\n转换为字典:")
dict_data = df.head(2).to_dict('records')
print(dict_data)12. 性能优化函数
12.1 内存和性能优化
python
# 1. memory_usage() - 内存使用情况
print("内存使用详情:")
memory_info = df.memory_usage(deep=True)
print(memory_info)
print(f"总内存使用: {memory_info.sum()} bytes")
# 2. 数据类型优化
def optimize_dtypes(df):
"""
优化DataFrame的数据类型以节省内存
"""
optimized_df = df.copy()
# 优化整数类型
for col in optimized_df.select_dtypes(include=['int64']).columns:
col_min = optimized_df[col].min()
col_max = optimized_df[col].max()
if col_min >= 0:
if col_max < 255:
optimized_df[col] = optimized_df[col].astype('uint8')
elif col_max < 65535:
optimized_df[col] = optimized_df[col].astype('uint16')
else:
if col_min > -128 and col_max < 127:
optimized_df[col] = optimized_df[col].astype('int8')
elif col_min > -32768 and col_max < 32767:
optimized_df[col] = optimized_df[col].astype('int16')
# 转换为分类类型
for col in optimized_df.select_dtypes(include=['object']).columns:
if optimized_df[col].nunique() / len(optimized_df) < 0.5:
optimized_df[col] = optimized_df[col].astype('category')
return optimized_df
optimized_df = optimize_dtypes(df)
print("\n优化前后内存对比:")
print(f"优化前: {df.memory_usage(deep=True).sum()} bytes")
print(f"优化后: {optimized_df.memory_usage(deep=True).sum()} bytes")13. 链式操作和方法链
13.1 方法链示例
python
# 链式操作示例
result = (df
.query('age > 25') # 筛选年龄大于25的员工
.groupby('department')['salary'] # 按部门分组薪资
.agg(['mean', 'count']) # 计算平均值和计数
.round(2) # 保留两位小数
.sort_values('mean', ascending=False) # 按平均薪资降序排列
)
print("链式操作结果:")
print(result)
# 复杂的链式操作
complex_result = (df
.assign( # 添加新列
salary_level=lambda x: pd.cut(x['salary'],
bins=[0, 7000, 8500, float('inf')],
labels=['低', '中', '高']),
age_group=lambda x: pd.cut(x['age'],
bins=[0, 28, 32, float('inf')],
labels=['青年', '中年', '资深'])
)
.groupby(['department', 'salary_level']) # 多级分组
.size() # 计算组大小
.unstack(fill_value=0) # 透视表格式
)
print("\n复杂链式操作结果:")
print(complex_result)14. 常用函数组合应用
14.1 数据分析流程
python
def analyze_employee_data(df):
"""
员工数据分析流程
"""
print("=== 员工数据分析报告 ===")
# 1. 基本信息
print(f"\n1. 基本信息")
print(f" 员工总数: {len(df)}")
print(f" 部门数量: {df['department'].nunique()}")
print(f" 数据完整性: {(1 - df.isnull().sum().sum() / df.size) * 100:.1f}%")
# 2. 薪资分析
print(f"\n2. 薪资分析")
salary_stats = df['salary'].describe()
print(f" 平均薪资: {salary_stats['mean']:.0f}")
print(f" 薪资中位数: {salary_stats['50%']:.0f}")
print(f" 薪资范围: {salary_stats['min']:.0f} - {salary_stats['max']:.0f}")
# 3. 部门分析
print(f"\n3. 部门分析")
dept_analysis = df.groupby('department').agg({
'salary': ['mean', 'count'],
'age': 'mean'
}).round(1)
print(dept_analysis)
# 4. 年龄分析
print(f"\n4. 年龄分布")
age_groups = pd.cut(df['age'], bins=[0, 28, 32, float('inf')],
labels=['≤28', '29-32', '>32'])
age_dist = age_groups.value_counts().sort_index()
print(age_dist)
# 5. 绩效分析
print(f"\n5. 绩效分布")
perf_dist = df['performance'].value_counts()
print(perf_dist)
return {
'total_employees': len(df),
'avg_salary': df['salary'].mean(),
'dept_count': df['department'].nunique(),
'age_distribution': age_dist.to_dict(),
'performance_distribution': perf_dist.to_dict()
}
# 执行分析
analysis_result = analyze_employee_data(df)本章小结
本章详细介绍了Pandas中最重要和最常用的函数:
- 数据查看函数:
head(),tail(),info(),describe(),shape,dtypes等 - 数据选择函数:
query(),where(),isin(),between(),loc[],iloc[]等 - 统计聚合函数:
sum(),mean(),std(),agg(),apply(),map()等 - 排序函数:
sort_values(),sort_index(),rank(),nlargest(),nsmallest()等 - 分组函数:
groupby(),transform(),size(),count()等 - 合并连接函数:
merge(),join(),concat(),pivot(),melt()等 - 字符串函数:
str.len(),str.upper(),str.replace(),str.contains()等 - 时间函数:
dt.year,dt.month,resample(),rolling()等 - 缺失值函数:
isnull(),dropna(),fillna(),interpolate()等 - 类型转换函数:
astype(),to_numeric(),to_datetime()等 - 实用工具函数:
duplicated(),reset_index(),to_csv(),memory_usage()等
掌握这些常用函数是高效使用Pandas的关键。在实际工作中,这些函数往往需要组合使用,通过方法链可以构建简洁而强大的数据处理流程。
练习题
- 使用链式操作完成一个完整的数据分析流程
- 编写一个函数来自动生成数据质量报告
- 实现一个数据清洗管道,包含多种常用函数
- 创建一个员工绩效分析系统,使用多种聚合函数
- 设计一个时间序列数据的分析工具
下一章我们将学习Pandas的相关性分析,探索变量之间的关系和模式。