主讲人:财务部刘经理
讲座主题:python与数据处理
时间地点:2024年10月22日,b1240
讲座内容:
Pandas(结构化数据处理)和NumPy(数值计算)是两大核心库,几乎能覆盖 80% 以上的日常数据处理场景(如 Excel/CSV 文件读写、数据清洗、筛选、统计分析等)。一、前置准备:环境与核心库安装
# 安装核心数据处理库pip install pandas numpy openpyxl matplotlib seaborn
pandas:处理表格型数据(Excel/CSV/ 数据库等)的核心库;numpy:高效处理数值数组计算,是 pandas 的底层支撑;openpyxl:支持 Excel 文件的读写;matplotlib/seaborn:数据可视化,辅助分析结果呈现。
二、Python 数据处理核心流程(附完整实操代码)
1. 第一步:数据读取(CSV/Excel)
sales_data.csv,或直接用代码生成):import pandas as pdimport numpy as npimport matplotlib.pyplot as plt# 设置中文显示(解决可视化中文乱码问题)plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False# 方法1:读取本地CSV文件(推荐新手先试用)# df = pd.read_csv('sales_data.csv')# 方法2:生成模拟销售数据(无需本地文件,直接运行)data = { '日期': pd.date_range(start='2025-01-01', periods=100, freq='D'), '地区': np.random.choice(['北京', '上海', '广州', '深圳'], size=100), '产品': np.random.choice(['A类', 'B类', 'C类'], size=100), '销量': np.random.randint(10, 100, size=100), '单价': np.random.uniform(50, 200, size=100).round(2), '销售额': None # 后续计算}df = pd.DataFrame(data)# 计算销售额(销量×单价)df['销售额'] = (df['销量'] * df['单价']).round(2)# 查看数据前5行,快速了解结构print("数据前5行:")print(df.head())# 查看数据基本信息(行数、列数、数据类型、缺失值)print("\n数据基本信息:")print(df.info())# 查看数值列的统计特征(均值、中位数、最大值等)print("\n数值列统计信息:")print(df.describe())2. 第二步:数据清洗(核心环节,解决 “脏数据” 问题)
# 1. 处理缺失值(常用3种方式)# 方式1:删除全为空的行/列(无实际意义)df = df.dropna(how='all')# 方式2:填充缺失值(如用均值填充数值列,用众数填充分类列)# 示例:若销量有缺失,用销量均值填充df['销量'] = df['销量'].fillna(df['销量'].mean())# 2. 处理重复值df = df.drop_duplicates() # 删除完全重复的行print(f"\n清洗后数据行数:{len(df)}")# 3. 处理异常值(如销量不可能为负数,或远超出正常范围)# 方法:筛选出合理范围的数据(销量≥0,单价≥0)df = df[(df['销量'] >= 0) & (df['单价'] >= 0)]# 也可通过四分位数筛选异常值(适合新手的简单方法)Q1 = df['销售额'].quantile(0.25)Q3 = df['销售额'].quantile(0.75)IQR = Q3 - Q1df = df[(df['销售额'] >= Q1 - 1.5*IQR) & (df['销售额'] <= Q3 + 1.5*IQR)]print(f"异常值处理后数据行数:{len(df)}")3. 第三步:数据转换与分析(核心需求:筛选、分组、统计)
# 1. 数据筛选:比如筛选“北京地区A类产品”的数据beijing_a = df[(df['地区'] == '北京') & (df['产品'] == 'A类')]print("\n北京地区A类产品数据:")print(beijing_a.head())# 2. 分组统计(最常用):按地区分组,计算销售额总和、均值region_sales = df.groupby('地区')['销售额'].agg(['sum', 'mean']).round(2)region_sales.columns = ['销售额总和', '销售额均值']print("\n各地区销售额统计:")print(region_sales)# 3. 多维度分组:按地区+产品分组,计算销量总和region_product_sales = df.groupby(['地区', '产品'])['销量'].sum()print("\n各地区各产品销量统计:")print(region_product_sales)# 4. 新增计算列:比如计算“利润”(假设利润率20%)df['利润'] = (df['销售额'] * 0.2).round(2)print("\n新增利润列后的数据:")print(df[['地区', '产品', '销售额', '利润']].head())4. 第四步:数据可视化(直观呈现分析结果)
# 1. 各地区销售额总和柱状图plt.figure(figsize=(10, 6))region_sales['销售额总和'].plot(kind='bar', color=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728'])plt.title('各地区销售额总和', fontsize=14)plt.xlabel('地区', fontsize=12)plt.ylabel('销售额(元)', fontsize=12)plt.xticks(rotation=0) # x轴标签不旋转plt.grid(axis='y', linestyle='--', alpha=0.7)plt.show()# 2. 各产品销量饼图product_sales = df.groupby('产品')['销量'].sum()plt.figure(figsize=(8, 8))plt.pie(product_sales, labels=product_sales.index, autopct='%1.1f%%', startangle=90)plt.title('各产品销量占比', fontsize=14)plt.axis('equal') # 保证饼图为正圆形plt.show()5. 第五步:数据导出(保存处理结果)
# 导出为CSV文件df.to_csv('processed_sales_data.csv', index=False, encoding='utf-8-sig')# 导出为Excel文件df.to_excel('processed_sales_data.xlsx', index=False, engine='openpyxl')print("\n处理后的数据已保存为CSV和Excel文件!")三、关键知识点解释(新手必懂)
DataFrame:Pandas 的核心数据结构,可理解为 “Python 版的 Excel 表格”,每行是一条数据,每列是一个字段,支持行列的灵活操作;
缺失值处理:优先 “填充”(数值列用均值 / 中位数,分类列用众数),而非直接删除,避免丢失有效数据;
groupby 分组:数据处理的 “灵魂操作”,核心逻辑是 “拆分→应用→合并”—— 先按指定字段拆分数据,再对拆分后的数据做统计(求和 / 均值等),最后合并结果;
可视化原则:柱状图适合对比 “分类数据”(如各地区销售额),饼图适合展示 “占比”(如产品销量占比),折线图适合展示 “趋势”(如每日销售额)。
四、新手常见坑与避坑技巧
中文乱码:读取 / 导出文件时指定
encoding='utf-8-sig'(CSV),可视化时设置中文字体(如代码中的plt.rcParams);Excel 读取失败:确保安装
openpyxl库,且 Excel 文件未被占用;数据类型错误:比如 “日期列” 被识别为文本,可通过
df['日期'] = pd.to_datetime(df['日期'])转换为日期类型;链式操作修改失败:避免
df[df['地区']=='北京']['销量'] = 100这类写法,改用df.loc[df['地区']=='北京', '销量'] = 100(Pandas 推荐的修改方式)。
总结
Python 数据处理的核心是
Pandas库,其DataFrame结构可高效处理表格型数据,覆盖 “读写→清洗→分析→可视化→导出” 全流程;数据清洗是基础,必须先处理缺失值、重复值、异常值,否则分析结果无意义;
分组统计(
groupby)是高频操作,结合可视化能快速挖掘数据价值,新手可从 “模拟数据 + 实操代码” 入手,逐步适配真实业务数据。
