《5讲学会用Python自动处理Excel报表》

第1讲-环境搭建与读取数据
第2讲-自动数据清洗与预处理
第3讲-数据汇总与计算
第4讲-数据可视化与图表生成
第5讲-自动化报表整合与输出

目标描述:学习python编程语言,把现实工作中需要的功能,用代码去实现,从而学以致用。逐步积累经验,成为一种专业和专长 ​​​

核心技能课程大纲:

第1讲 环境搭建与数据读取

第一步:环境准备

先安装Python,如果您是新手,强烈建议安装Anaconda,此软件的傻瓜式安装过程比较友好,按安装提示点下一步完成即可,而且可以包含Python环境。

‌ 1.下载Anaconda‌:从Anaconda官网下载适合您操作系统的版本(Windows/macOS/Linux)。https://www.anaconda.com/

2. ‌安装Anaconda‌:运行安装程序,按照提示完成安装(建议勾选“Add Anaconda to PATH”选项)。

3. ‌创建Python环境‌: 打开Anaconda Prompt(Windows)或终端(macOS/Linux)。 输入 conda create –name myenv python=3.8(可替换myenv为自定义环境名,3.8为Python版本)。 激活环境:conda activate myenv。

操作过程截图如下:

注意:标红的地方需要输入y。

安装完之后在命令行窗口输入python –version 可以检查是否安装成功以及版本信息。

4.安装额外包‌:使用conda install或pip install安装所需库(如numpy、pandas)。

在开始之前,请确保您已安装以下Python库,它包含了数据科学所需的大部分库,执行以下命令。



# 在您的终端或命令提示符中运行以下命令进行安装
pip install pandas numpy matplotlib seaborn plotly

5.在电脑屏幕左下角的开始菜单中找到anacoda3,点击二级菜单Anacoda Navigator,这是一个集成应用软件管理器,可以一键下载和安装各种工具,相当于手机的应用市场,通过打开这个工具,在主页home中安装Jupyter Notebook(编写python代码的工具),写代码都在这里进行。

下一步点击install,开始安装,安装完成后,在电脑左下角的开始菜单中找到Jupyter Notebook启动。

打开后,点击New ,选择Notebook。

第二步:数据读取

代码如下:



# lecture1_data_reading.py
import pandas as pd
import openpyxl
import xlwings as xw
 
def setup_environment():
    """检查并安装必要的包"""
    required_packages = ['pandas', 'openpyxl', 'xlwings', 'jupyter']
    
    print("请确保已安装以下包:")
    for package in required_packages:
        print(f"- {package}")
 
def read_excel_pandas(file_path):
    """使用pandas读取Excel文件"""
    try:
        df = pd.read_excel(file_path)
        print("数据读取成功!")
        print(f"数据形状: {df.shape}")
        print(f"列名: {list(df.columns)}")
        print("
前5行数据:")
        print(df.head())
        return df
    except Exception as e:
        print(f"读取文件时出错: {e}")
        return None
 
def read_excel_openpyxl(file_path):
    """使用openpyxl读取Excel文件"""
    try:
        workbook = openpyxl.load_workbook(file_path)
        sheet = workbook.active
        
        print(f"工作表名称: {sheet.title}")
        print(f"数据范围: A1:{sheet.max_column}{sheet.max_row}")
        
        # 读取前5行数据
        for row in sheet.iter_rows(max_row=5, values_only=True):
            print(row)
            
        return workbook
    except Exception as e:
        print(f"使用openpyxl读取文件时出错: {e}")
        return None
 
def read_excel_xlwings(file_path):
    """使用xlwings读取Excel文件"""
    try:
        app = xw.App(visible=False)
        workbook = app.books.open(file_path)
        sheet = workbook.sheets[0]
        
        # 读取整个数据范围
        data_range = sheet.used_range
        data = data_range.value
        
        print(f"数据范围: {data_range.address}")
        print("前5行数据:")
        for i in range(min(5, len(data))):
            print(data[i])
            
        workbook.close()
        app.quit()
        return data
    except Exception as e:
        print(f"使用xlwings读取文件时出错: {e}")
        return None
 
if __name__ == "__main__":
    # 示例文件路径,请根据实际情况修改
    file_path = "C:UsersAdministratorDownloadssample_data.xlsx"
    
    print("=== Python环境与数据读取示例 ===")
    setup_environment()
    
    print("
=== 使用pandas读取 ===")
    df_pandas = read_excel_pandas(file_path)
    
    print("
=== 使用openpyxl读取 ===")
    workbook_openpyxl = read_excel_openpyxl(file_path)
    
    print("
=== 使用xlwings读取 ===")
    data_xlwings = read_excel_xlwings(file_path)

第2讲:数据清洗与预处理



# lecture2_data_cleaning.py
import pandas as pd
import numpy as np
 
def data_diagnosis(df):
    """数据诊断:识别缺失值、重复值及异常值"""
    print("=== 数据诊断报告 ===")
    print(f"数据形状: {df.shape}")
    print(f"
数据类型:")
    print(df.dtypes)
    
    print(f"
缺失值统计:")
    missing_data = df.isnull().sum()
    for col, count in missing_data.items():
        if count > 0:
            print(f"{col}: {count}个缺失值 ({count/len(df)*100:.2f}%)")
    
    print(f"
重复行数量: {df.duplicated().sum()}")
    
    print(f"
数据描述性统计:")
    print(df.describe())
 
def clean_data(df):
    """数据清洗:处理缺失值、重复值"""
    df_clean = df.copy()
    
    # 处理缺失值
    print("处理缺失值...")
    for col in df_clean.columns:
        if df_clean[col].isnull().sum() > 0:
            # 数值列用中位数填充,文本列用众数填充
            if df_clean[col].dtype in ['int64', 'float64']:
                df_clean[col].fillna(df_clean[col].median(), inplace=True)
            else:
                mode_value = df_clean[col].mode()
                if len(mode_value) > 0:
                    df_clean[col].fillna(mode_value[0], inplace=True)
    
    # 去除重复行
    initial_rows = len(df_clean)
    df_clean.drop_duplicates(inplace=True)
    removed_duplicates = initial_rows - len(df_clean)
    print(f"移除了 {removed_duplicates} 个重复行")
    
    return df_clean
 
def format_data(df):
    """格式规范:调整数据类型,重命名列名"""
    df_formatted = df.copy()
    
    # 重命名列名(去掉空格,统一格式)
    df_formatted.columns = [col.strip().replace(' ', '_').lower() for col in df_formatted.columns]
    print("列名已标准化")
    
    # 调整数据类型
    for col in df_formatted.columns:
        # 尝试转换为数值类型
        if df_formatted[col].dtype == 'object':
            try:
                df_formatted[col] = pd.to_numeric(df_formatted[col], errors='ignore')
            except:
                pass
        
        # 尝试转换为日期类型
        if 'date' in col.lower() or '时间' in col:
            try:
                df_formatted[col] = pd.to_datetime(df_formatted[col], errors='ignore')
            except:
                pass
    
    return df_formatted
 
def filter_and_sort_data(df, filter_condition=None, sort_columns=None, ascending=True):
    """数据筛选与排序"""
    df_processed = df.copy()
    
    # 数据筛选
    if filter_condition is not None:
        df_processed = df_processed.query(filter_condition)
        print(f"筛选后数据形状: {df_processed.shape}")
    
    # 数据排序
    if sort_columns is not None:
        if isinstance(sort_columns, str):
            sort_columns = [sort_columns]
        df_processed = df_processed.sort_values(by=sort_columns, ascending=ascending)
        print(f"按 {sort_columns} 排序完成")
    
    return df_processed
 
# 示例使用
if __name__ == "__main__":
    # 创建示例数据
    sample_data = {
        '姓名': ['张三', '李四', '王五', '赵六', np.nan, '张三'],
        '年龄': [25, 30, np.nan, 35, 28, 25],
        '工资': [5000, 6000, 7000, np.nan, 5500, 5000],
        '部门': ['销售', '技术', '销售', '人事', '技术', '销售'],
        '入职日期': ['2020-01-15', '2019-03-20', '2021-07-10', '2018-11-05', '2022-02-28', '2020-01-15']
    }
    
    df = pd.DataFrame(sample_data)
    print("原始数据:")
    print(df)
    
    # 数据诊断
    data_diagnosis(df)
    
    # 数据清洗
    df_clean = clean_data(df)
    print("
清洗后数据:")
    print(df_clean)
    
    # 格式规范
    df_formatted = format_data(df_clean)
    print("
格式化后数据:")
    print(df_formatted)
    
    # 数据筛选与排序
    df_filtered = filter_and_sort_data(
        df_formatted, 
        filter_condition="年龄 > 26", 
        sort_columns="工资", 
        ascending=False
    )
    print("
筛选排序后数据:")
    print(df_filtered)

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
小崽崽崽崽儿的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容