Python pandas模块的主要功能、基础操作和关键代码有哪些?附数据处理示例并分享Python数据分析零基础入门教程
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数据科学 杨维忠”即可。
创作不易,恳请多多点赞,感谢您的支持!也期待大家多多关注我,让我共同学习数据分析知识。
更多推荐
所有评论(0)