Skip to content

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中最重要和最常用的函数:

  1. 数据查看函数head(), tail(), info(), describe(), shape, dtypes
  2. 数据选择函数query(), where(), isin(), between(), loc[], iloc[]
  3. 统计聚合函数sum(), mean(), std(), agg(), apply(), map()
  4. 排序函数sort_values(), sort_index(), rank(), nlargest(), nsmallest()
  5. 分组函数groupby(), transform(), size(), count()
  6. 合并连接函数merge(), join(), concat(), pivot(), melt()
  7. 字符串函数str.len(), str.upper(), str.replace(), str.contains()
  8. 时间函数dt.year, dt.month, resample(), rolling()
  9. 缺失值函数isnull(), dropna(), fillna(), interpolate()
  10. 类型转换函数astype(), to_numeric(), to_datetime()
  11. 实用工具函数duplicated(), reset_index(), to_csv(), memory_usage()

掌握这些常用函数是高效使用Pandas的关键。在实际工作中,这些函数往往需要组合使用,通过方法链可以构建简洁而强大的数据处理流程。

练习题

  1. 使用链式操作完成一个完整的数据分析流程
  2. 编写一个函数来自动生成数据质量报告
  3. 实现一个数据清洗管道,包含多种常用函数
  4. 创建一个员工绩效分析系统,使用多种聚合函数
  5. 设计一个时间序列数据的分析工具

下一章我们将学习Pandas的相关性分析,探索变量之间的关系和模式。