Pandas是Python数据分析的核心库,它构建于NumPy之上,提供了高效且灵活的数据结构,专门用于处理结构化数据。下面我将详细介绍Pandas的主要功能、基础操作和关键代码,并附上实际的数据处理示例。

Pandas数据分析完整指南

1. Pandas概述与核心数据结构

Pandas是Python数据处理领域不可或缺的工具,它提供了两种核心数据结构:​Series​(一维带标签数组)和DataFrame​(二维表格型数据结构)。

1.1 Series数据结构

Series是带索引的一维数组,可以存储任何数据类型。

import pandas as pd
import numpy as np

# 创建Series
s1 = pd.Series([1, 3, 5, np.nan, 6, 8])  # 默认整数索引
s2 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])  # 自定义索引
s3 = pd.Series({"小李":82, "小陈":93, "小张":91})  # 从字典创建

print("s2的值:", s2.values)
print("s2的索引:", s2.index)
print("通过索引访问:", s2['b'])  # 输出: 20

1.2 DataFrame数据结构

DataFrame是Pandas中最常用的数据结构,类似于Excel表格或SQL数据库表。

# 从字典创建DataFrame
data = {
    '姓名': ['张三', '李四', '王五', '赵六'],
    '年龄': [25, 30, 35, 28],
    '城市': ['北京', '上海', '广州', '深圳'],
    '薪资': [50000, 60000, 70000, 55000]
}
df = pd.DataFrame(data)
print(df)

# 从列表创建DataFrame
df2 = pd.DataFrame([
    [1, 'Alice', 25],
    [2, 'Bob', 30],
    [3, 'Charlie', 35]
], columns=['ID', 'Name', 'Age'])

2. 数据导入与导出

Pandas支持多种格式的数据读写操作。

2.1 读取数据

# 从CSV文件读取
df = pd.read_csv('data.csv', encoding='utf-8')

# 从Excel文件读取
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 从TXT文件读取(使用制表符分隔)
df_txt = pd.read_csv('data.txt', sep='\t')

# 查看数据基本信息
print(df.head())      # 前5行
print(df.info())     # 数据类型和缺失值信息
print(df.describe()) # 数值型列统计描述

2.2 保存数据

# 保存到CSV(不保存索引)
df.to_csv('processed_data.csv', index=False)

# 保存到Excel文件
with pd.ExcelWriter('output.xlsx') as writer:
    df.to_excel(writer, sheet_name='处理数据', index=False)
    
    # 可以保存多个sheet
    summary = df.groupby('城市')['薪资'].mean().reset_index()
    summary.to_excel(writer, sheet_name='汇总数据', index=False)

3. 数据查看与选择

3.1 数据选择方法

# 选择列
ages = df['年龄']                          # 单列选择
name_city = df[['姓名', '城市']]           # 多列选择

# 选择行
first_row = df.iloc[0]                    # 按位置选择(第一行)
bob_row = df[df['姓名'] == '李四']         # 按条件选择

# 使用loc和iloc选择数据
print(df.loc[0, '姓名'])                   # 按标签选择
print(df.iloc[0, 1])                      # 按位置选择

# 条件筛选
high_salary = df[df['薪资'] > 55000]      # 薪资大于55000的记录
beijing_residents = df[df['城市'] == '北京'] # 北京居民

3.2 数据切片与索引

# 行切片
print(df.iloc[1:3])                       # 第2到第3行

# 行列同时选择
subset = df.loc[0:2, ['姓名', '年龄']]     # 前3行的姓名和年龄列

# 布尔索引复合条件
condition = (df['年龄'] > 25) & (df['薪资'] < 65000)
filtered_data = df[condition]

4. 数据清洗与预处理

数据清洗是数据分析的关键步骤,Pandas提供了全面的数据清洗功能。

4.1 处理缺失值

# 创建包含缺失值的示例数据
data_with_na = {
    '姓名': ['张三', '李四', '王五', '赵六', None],
    '年龄': [25, np.nan, 35, 28, 32],
    '薪资': [50000, 60000, np.nan, 55000, 48000]
}
df_na = pd.DataFrame(data_with_na)

# 检查缺失值
print("缺失值统计:")
print(df_na.isnull().sum())

# 处理缺失值
df_filled = df_na.fillna({'姓名': '未知', '年龄': df_na['年龄'].mean(), '薪资': 0})  # 填充缺失值
df_dropped = df_na.dropna()               # 删除含有缺失值的行

print("填充后的数据:")
print(df_filled)

4.2 处理重复数据

# 创建包含重复记录的数据
df_dup = pd.DataFrame({
    '姓名': ['张三', '李四', '张三', '王五', '李四'],
    '年龄': [25, 30, 25, 35, 30],
    '城市': ['北京', '上海', '北京', '广州', '上海']
})

# 检测和删除重复数据
print("重复行统计:", df_dup.duplicated().sum())
df_unique = df_dup.drop_duplicates()       # 保留第一次出现的重复项
print("去重后的数据:")
print(df_unique)

4.3 数据类型转换

# 数据类型转换示例
df_dtypes = pd.DataFrame({
    '字符串数字': ['1', '2', '3'],
    '日期字符串': ['2023-01-01', '2023-01-02', '2023-01-03'],
    '布尔字符串': ['True', 'False', 'True']
})

# 转换数据类型
df_dtypes['字符串数字'] = df_dtypes['字符串数字'].astype(int)
df_dtypes['日期字符串'] = pd.to_datetime(df_dtypes['日期字符串'])
df_dtypes['布尔字符串'] = df_dtypes['布尔字符串'].map({'True': True, 'False': False})

print(df_dtypes.dtypes)

5. 数据转换与分析

5.1 数据排序与分组

# 数据排序
df_sorted = df.sort_values(by='薪资', ascending=False)  # 按薪资降序排序
df_sorted_multi = df.sort_values(by=['城市', '年龄'])   # 多列排序

# 数据分组聚合
city_stats = df.groupby('城市').agg({
    '年龄': ['mean', 'min', 'max', 'count'],
    '薪资': ['mean', 'sum']
})                                                     # 按城市分组计算统计量
print(city_stats)

5.2 数据合并与连接

# 创建两个DataFrame进行合并
df1 = pd.DataFrame({
    'ID': [1, 2, 3],
    '姓名': ['张三', '李四', '王五']
})

df2 = pd.DataFrame({
    'ID': [2, 3, 4],
    '薪资': [60000, 70000, 55000]
})

# 合并数据
merged_df = pd.merge(df1, df2, on='ID', how='inner')  # 内连接
print("合并后的数据:")
print(merged_df)

5.3 数据透视表

# 创建销售数据示例
sales_data = pd.DataFrame({
    '日期': pd.date_range('2023-01-01', periods=100, freq='D'),
    '产品': np.random.choice(['手机', '平板', '笔记本'], 100),
    '地区': np.random.choice(['北京', '上海', '广州'], 100),
    '销售额': np.random.randint(1000, 10000, 100)
})

# 创建数据透视表
pivot_table = sales_data.pivot_table(
    index='地区', 
    columns='产品', 
    values='销售额', 
    aggfunc='sum'
)                                                     # 按地区和产品汇总销售额
print("数据透视表:")
print(pivot_table)

6. 实际数据处理示例

6.1 员工数据分析案例

# 创建示例员工数据
employees = pd.DataFrame({
    '员工ID': [101, 102, 103, 104, 105, 106],
    '姓名': ['张三', '李四', '王五', '赵六', '钱七', '孙八'],
    '部门': ['技术部', '销售部', '技术部', '人事部', '销售部', '技术部'],
    '入职年份': [2018, 2020, 2019, 2021, 2020, 2022],
    '薪资': [75000, 60000, 80000, 55000, 65000, 70000],
    '绩效评分': [4.5, 3.8, 4.2, 4.0, 4.7, 4.9]
})

# 数据处理与分析
# 1. 添加工龄列
current_year = 2023
employees['工龄'] = current_year - employees['入职年份']

# 2. 添加薪资等级列
def salary_level(salary):
    if salary < 60000:
        return '低'
    elif salary < 75000:
        return '中'
    else:
        return '高'

employees['薪资等级'] = employees['薪资'].apply(salary_level)

# 3. 部门统计分析
dept_stats = employees.groupby('部门').agg({
    '员工ID': 'count',
    '薪资': ['mean', 'max', 'min'],
    '绩效评分': 'mean'
}).round(2)

dept_stats.columns = ['员工数', '平均薪资', '最高薪资', '最低薪资', '平均绩效']
print("部门统计信息:")
print(dept_stats)

# 4. 筛选高绩效员工
high_performers = employees[employees['绩效评分'] > 4.5]
print("高绩效员工:")
print(high_performers[['姓名', '部门', '绩效评分']])

6.2 销售数据综合分析

# 创建销售数据
np.random.seed(42)  # 保证结果可重现
sales = pd.DataFrame({
    '订单ID': range(1001, 1021),
    '产品类别': np.random.choice(['电子产品', '服装', '食品', '家居'], 20),
    '销售额': np.random.uniform(100, 1000, 20),
    '销售日期': pd.date_range('2023-05-01', periods=20, freq='D'),
    '销售人员': np.random.choice(['张三', '李四', '王五'], 20)
})

# 数据预处理
# 添加销售额区间
bins = [0, 300, 600, 1000]
labels = ['低', '中', '高']
sales['销售额区间'] = pd.cut(sales['销售额'], bins=bins, labels=labels)

# 提取日期信息
sales['月份'] = sales['销售日期'].dt.month
sales['星期'] = sales['销售日期'].dt.day_name()

# 多维度分析
category_analysis = sales.groupby('产品类别').agg({
    '销售额': ['sum', 'mean', 'count']
}).round(2)

salesperson_analysis = sales.groupby('销售人员').agg({
    '订单ID': 'count',
    '销售额': 'sum'
}).sort_values(by='销售额', ascending=False)

print("产品类别分析:")
print(category_analysis)
print("\n销售人员业绩排名:")
print(salesperson_analysis)

# 保存处理结果
sales.to_excel('销售分析结果.xlsx', sheet_name='详细数据', index=False)

7. 高级技巧与性能优化

7.1 向量化操作

# 使用向量化操作代替循环(提高性能)
df['奖金'] = df['薪资'] * 0.1  # 所有员工发放10%奖金

# 使用条件赋值
df['评级'] = np.where(df['绩效评分'] > 4.5, '优秀', 
                     np.where(df['绩效评分'] > 4.0, '良好', '合格'))

7.2 处理大数据集技巧

# 分块读取大数据集
chunk_size = 10000
chunks = []
for chunk in pd.read_csv('large_dataset.csv', chunksize=chunk_size):
    # 对每个数据块进行处理
    processed_chunk = chunk[chunk['重要字段'] > 0]
    chunks.append(processed_chunk)

# 合并处理后的数据
large_df = pd.concat(chunks, ignore_index=True)

8. Python数据分析学习教程

针对Python数据分析或机器学习推荐两本入门级的图书:《Python机器学习原理与算法实现》(杨维忠 张甜 著 2023年2月新书 清华大学出版社)《Python数据科学应用从入门到精通》(张甜 杨维忠 著 2023年11月新书 清华大学出版社)。

这两本书的特色是在数据分析、机器学习各种算法的介绍方面通俗易懂,较少涉及数学推导,对数学基础要求相对不高,在python代码方面讲的很细致,看了以后根据自身需要选取算法、优化代码、科学调参。都有配套免费提供的源代码、数据文件和视频讲解,也有PPT、思维导图、习题等。

8.1 Python机器学习原理与算法实现

为什么说这两本书值得?首先说《Python机器学习原理与算法实现》(杨维忠 张甜 著 2023年2月新书 清华大学出版社),内容非常详实,包含了Python和机器学习,相当于一次获得了两本书

在讲解各类机器学习算法时,逐一详解用到的各种Python代码,针对每行代码均有恰当注释(这一点基本上是大多数书目做不到的)。很多银行员工通过这些学习一下子就学会了Python,并且用于工作中开展数据分析、机器学习、数据可视化等,这本书也成为银行员工的一本网红书。

全书内容共17章。第1、2章介绍Python的入门知识和进阶知识;第3章介绍机器学习的概念及各种术语及评价标准;第4~10章介绍相对简单的监督式学习方法,包括线性回归算法、二元Logistic回归算法、多元Logistic回归算法、判别分析算法、朴素贝叶斯算法、高维数据惩罚回归算法、K近邻算法;第11、12章介绍主成分分析算法、聚类分析算法两种非监督式学习算法;第13~15章介绍相对复杂的监督式学习算法,包括决策树算法和随机森林算法、提升法两种集成学习算法;第16、17章介绍支持向量机算法、神经网络算法两种高级监督式学习算法。

8.2 Python数据科学应用从入门到精通

《Python数据科学应用从入门到精通》一书,旨在教会读者实现全流程的数据分析,并且相对《Python机器学习原理与算法实现》一书增加了很多概念性、科普性的内容,进一步降低了学习难度。国务院发展研究中心创新发展研究部第二研究室主任杨超 ,山东大学经济学院金融系党支部书记、副主任、副教授、硕士生导师张博,山东管理学院信息工程学院院长 袁锋 教授、硕士生导师,山东大学经济学院刘一鸣副研究员、硕士生导师,得厚投资合伙人张伟民等一众大牛联袂推荐。

书中全是干货,买这一本书相当于一下子得到了5本书(Python基础、数据清洗、特征工程、数据可视化、数据挖掘与建模),而且入门超级简单,不需要编程基础,也不需要过多数学推导,非常适用于零基础学生。

全书内容共分13章。其中第1章为数据科学应用概述,第2章讲解Python的入门基础知识,第3章讲解数据清洗。第4~6章介绍特征工程,包括特征选择、特征处理、特征提取。第7章介绍数据可视化。第8~13章介绍6种数据挖掘与建模方法,分别为线性回归、Logistic回归、决策树、随机森林、神经网络、RFM分析。

从数据科学应用和Python的入门,再到数据清洗与特征工程,最终完成数据挖掘与建模或数据可视化,从而可以为读者提供“从拿到数据开始,一直到构建形成最终模型或可视化报告成果”的一站式、全流程指导。

两本书随书赠送的学习资料也很多,包括全部的源代码、PPT、思维导图,还有10小时以上的讲解视频,每一章后面还有练习题及参考答案,还有学习群,相对于只看网络上的视频,一方面更加系统、高效,另一方面照着书一步步操作学起来也事半功倍。全网热销中,当当、京东等平台搜索“Python机器学习 杨维忠”“Python数据科学 杨维忠”即可。

创作不易,恳请多多点赞,感谢您的支持!也期待大家多多关注我,让我共同学习数据分析知识。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐