Python处理Excel 的常用操作详解

要在Python中处理Excel文件,可以使用openpyxl库来处理.xlsx文件,或者使用xlrd和xlwt(或其升级版openpyxl)来处理.xls文件。

请注意,你需要先安装 pandasopenpyxl 库才能运行代码。可以使用以下命令安装:

bash 复制代码
pip install pandas openpyxl
  1. 读取 Excel 文件

    使用 pandas.read_excel() 函数可以读取 Excel 文件。

    python 复制代码
    import pandas as pd
    
    # 读取 Excel 文件
    df = pd.read_excel('path_to_your_excel_file.xlsx')
    print(df)
  2. 写入数据到 Excel

    使用 DataFrame.to_excel() 方法可以将数据写入 Excel 文件。

    python 复制代码
    # 写入数据到 Excel
    df.to_excel('output_file.xlsx', index=False)
  3. 选择特定的列

    使用列名来选择 DataFrame 中的列。

    python 复制代码
    # 选择特定的列
    selected_columns = df[['column1', 'column2']]
    print(selected_columns)
  4. 筛选数据

    使用布尔索引来筛选数据。

    python 复制代码
    # 筛选数据
    filtered_data = df[df['column1'] > value]
    print(filtered_data)
  5. 添加新列

    可以直接通过赋值来添加新列。

    python 复制代码
    # 添加新列
    df['new_column'] = df['existing_column'] * 2
    print(df)
  6. 删除列

    使用 drop 方法来删除列。

    python 复制代码
    # 删除列
    df = df.drop('column_to_drop', axis=1)
    print(df)
  7. 保存修改后的 DataFrame

    使用 to_excel 方法保存修改后的 DataFrame。

    python 复制代码
    # 保存修改后的 DataFrame
    df.to_excel('modified_file.xlsx', index=False)
  8. 处理大型 Excel 文件

    如果 Excel 文件非常大,可以使用 dtype 参数指定列的数据类型来减少内存使用。

    python 复制代码
    # 处理大型 Excel 文件
    df = pd.read_excel('large_file.xlsx', dtype={'column1': 'int32'})
  9. 使用 openpyxl 引擎

    对于 .xlsx 文件,pandas 默认使用 xlrd 引擎,但你也可以使用 openpyxl 引擎。

    python 复制代码
    # 使用 openpyxl 引擎
    df = pd.read_excel('file.xlsx', engine='openpyxl')
  10. 合并多个 Excel 工作表

    使用 ExcelFile 类来读取整个 Excel 文件,然后可以访问不同的工作表。

    python 复制代码
    # 合并多个 Excel 工作表
    excel = pd.ExcelFile('multiple_sheets.xlsx')
    sheet1 = excel.parse('Sheet1')
    sheet2 = excel.parse('Sheet2')
    combined_df = pd.concat([sheet1, sheet2], ignore_index=True)
    print(combined_df)

当然,除了上述基本操作之外,pandas 还提供了许多高级功能来处理 Excel 数据。以下是一些额外的操作和代码示例:

  1. 设置 Excel 文件的编码

    有时 Excel 文件可能使用特定的编码,可以通过设置 encoding 参数来读取。

    python 复制代码
    # 设置 Excel 文件的编码
    df = pd.read_excel('file.xlsx', encoding='utf-8')
  2. 读取特定工作表

    默认情况下,pandas 读取第一个工作表。你可以指定 sheet_name 参数来读取特定的工作表。

    python 复制代码
    # 读取特定工作表
    df = pd.read_excel('file.xlsx', sheet_name='Sheet2')
  3. 跳过行和列

    使用 skiprowsusecols 参数来跳过行和选择列。

    python 复制代码
    # 跳过行和列
    df = pd.read_excel('file.xlsx', skiprows=1, usecols=['column1', 'column2'])
  4. 处理日期和时间

    如果 Excel 文件包含日期和时间数据,可以使用 parse_dates 参数来确保正确解析。

    python 复制代码
    # 处理日期和时间
    df = pd.read_excel('file.xlsx', parse_dates=['date_column'])
  5. 数据分组和聚合

    使用 groupby 方法对数据进行分组,并使用聚合函数如 sum, mean 等。

    python 复制代码
    # 数据分组和聚合
    grouped_data = df.groupby('group_column').sum()
    print(grouped_data)
  6. 数据重塑

    使用 pivot_table 方法进行数据重塑。

    python 复制代码
    # 数据重塑
    pivot_table = pd.pivot_table(df, values='value_column', index='row_column', columns='column_column', aggfunc='mean')
    print(pivot_table)
  7. 条件过滤

    使用 query 方法进行复杂的条件过滤。

    python 复制代码
    # 条件过滤
    filtered_data = df.query('column1 > value & column2 < another_value')
    print(filtered_data)
  8. Excel 文件的样式和格式

    使用 openpyxl 库,你可以设置 Excel 文件的样式和格式。

    python 复制代码
    from openpyxl import load_workbook
    from openpyxl.styles import Font, Border, Alignment, PatternFill
    
    # 加载 Excel 文件
    wb = load_workbook('file.xlsx')
    ws = wb.active
    
    # 设置单元格样式
    for cell in ws['A']:
        cell.font = Font(bold=True)
        cell.border = Border(left=1, right=1, top=1, bottom=1)
        cell.alignment = Alignment(horizontal='center', vertical='center')
        cell.fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
    
    # 保存文件
    wb.save('styled_file.xlsx')
  9. 批量读取和写入 Excel 文件

    使用循环可以批量处理多个 Excel 文件。

    python 复制代码
    # 批量读取和写入 Excel 文件
    files = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx']
    for file in files:
        df = pd.read_excel(file)
        # 处理数据
        df.to_excel(f'processed_{file}', index=False)
  10. 使用 xlwings 进行更高级的 Excel 操作
    xlwings 是另一个库,可以提供与 Excel 的更深层次的交互,如调用宏、修改公式等。

    python 复制代码
    import xlwings as xw
    
    # 连接到 Excel 文件
    wb = xw.Book('file.xlsx')
    ws = wb.sheets['Sheet1']
    
    # 读取和写入数据
    data = ws.range('A1').api.Value
    ws.range('B1').api.Value = 'New Value'
    
    # 保存并关闭
    wb.save()
    wb.close()

请注意,xlwings 需要在电脑上安装 Excel 应用程序。你可以使用以下命令安装 xlwings

bash 复制代码
pip install xlwings
  1. 合并多个 Excel 文件
    如果需要合并多个 Excel 文件到一个 DataFrame,可以使用循环和 concat 函数。
python 复制代码
# 合并多个 Excel 文件
file_names = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx']
dfs = [pd.read_excel(file) for file in file_names]
combined_df = pd.concat(dfs, ignore_index=True)
print(combined_df)
  1. 处理 Excel 文件中的公式
    默认情况下,pandas 会计算 Excel 文件中的公式。如果需要保留公式,可以使用 data_only=True
python 复制代码
# 处理 Excel 文件中的公式
df = pd.read_excel('file_with_formulas.xlsx', data_only=True)
  1. 使用 dtype 避免数据类型问题
    当 Excel 文件包含混合数据类型时,可以显式指定列的数据类型。
python 复制代码
# 使用 dtype 避免数据类型问题
dtypes = {'column1': 'int32', 'column2': 'float32'}
df = pd.read_excel('file.xlsx', dtype=dtypes)
  1. 处理 Excel 文件的合并单元格
    pandas 通常不会保留合并单元格的信息。如果你需要处理合并单元格,可能需要使用 openpyxl
python 复制代码
# 使用 openpyxl 处理合并单元格
from openpyxl import load_workbook

wb = load_workbook('file_with_merged_cells.xlsx')
ws = wb.active
for merged_cell in ws.merged_cells.ranges:
    cell = ws.cell(row=merged_cell.min_row, column=merged_cell.min_col)
    print(cell.coordinate, cell.value)
  1. 使用 ExcelWriter 保存 DataFrame
    ExcelWriter 可以保存一个或多个 DataFrame 到不同的工作表。
python 复制代码
# 使用 ExcelWriter 保存 DataFrame
with pd.ExcelWriter('multiple_sheets.xlsx', engine='openpyxl') as writer:
    df1.to_excel(writer, sheet_name='Sheet1')
    df2.to_excel(writer, sheet_name='Sheet2')
  1. 设置 Excel 单元格的格式
    使用 style 函数可以设置 Excel 单元格的格式。
python 复制代码
# 设置 Excel 单元格的格式
style = {'font': {'color': 'blue', 'bold': True},
         'borders': {'top': 'thin', 'bottom': 'thin', 'left': 'thin', 'right': 'thin'},
         'alignment': {'horizontal': 'center', 'vertical': 'top'}}
df.style.applymap(style).to_excel('styled_excel.xlsx', engine='openpyxl')
  1. 使用 pivot 进行数据透视
    pivot 方法可以用来创建数据透视表。
python 复制代码
# 使用 pivot 进行数据透视
pivot_df = df.pivot(index='row_column', columns='column_column', values='value_column')
print(pivot_df)
  1. 使用 melt 重塑 DataFrame
    melt 方法可以将宽格式的 DataFrame 转换为长格式。
python 复制代码
# 使用 melt 重塑 DataFrame
melted_df = df.melt(id_vars=['id_column'], value_vars=['column1', 'column2'], var_name='column_name', value_name='value')
print(melted_df)
  1. Excel 文件的版本控制
    如果你需要处理不同版本的 Excel 文件,可以使用 pd.read_excel()if_sheet_exists 参数。
python 复制代码
# Excel 文件的版本控制
df = pd.read_excel('file.xlsx', if_sheet_exists='Sheet2')
  1. 处理 Excel 文件的超链接
    openpyxl 可以读取和修改 Excel 文件中的超链接。
python 复制代码
# 处理 Excel 文件的超链接
from openpyxl.worksheet.hyperlink import Hyperlink

wb = load_workbook('file_with_hyperlinks.xlsx')
ws = wb.active
for cell in ws.hyperlinks:
    print(cell.ref, cell.target)
  1. 使用 eval 读取 Excel 文件中的公式结果
    如果你需要读取 Excel 文件中公式的计算结果,可以使用 openpyxl 引擎并设置 engine='openpyxl'mode='values'
python 复制代码
df = pd.read_excel('file_with_formulas.xlsx', engine='openpyxl', mode='values')
  1. Excel 文件的列宽和行高调整
    使用 openpyxl 可以调整 Excel 文件的列宽和行高。
python 复制代码
from openpyxl import Workbook
from openpyxl.utils import get_column_letter

wb = Workbook()
ws = wb.active
ws['A1'] = 'Test'
ws.column_dimensions['A'].width = 20  # 设置列宽
ws.row_dimensions[1].height = 30     # 设置行高

wb.save('adjusted_dimensions.xlsx')
  1. Excel 文件的排序
    使用 sort_values 方法可以对 DataFrame 进行排序。
python 复制代码
# Excel 文件的排序
sorted_df = df.sort_values(by='column_to_sort', ascending=True)
sorted_df.to_excel('sorted_file.xlsx', index=False)
  1. Excel 文件的分组排序
    结合 groupbysort_values 可以对数据进行分组排序。
python 复制代码
# Excel 文件的分组排序
grouped_sorted_df = df.groupby('group_column').apply(lambda x: x.sort_values(by='sort_column'))
grouped_sorted_df.to_excel('grouped_sorted_file.xlsx', index=False)
  1. Excel 文件的缺失数据处理
    使用 dropnafillna 方法可以处理 DataFrame 中的缺失数据。
python 复制代码
# Excel 文件的缺失数据处理
clean_df = df.dropna(subset=['important_column'])  # 删除含有缺失值的行
# 或者
filled_df = df.fillna(value={'default_value_column': 'default_value'})  # 填充缺失值
  1. Excel 文件的异常值检测
    使用统计方法或可视化方法可以检测数据中的异常值。
python 复制代码
# Excel 文件的异常值检测
q1 = df['column'].quantile(0.25)
q3 = df['column'].quantile(0.75)
iqr = q3 - q1
outliers = df[(df['column'] < (q1 - 1.5 * iqr)) | (df['column'] > (q3 + 1.5 * iqr))]
  1. Excel 文件的多条件筛选
    使用 query 方法可以进行多条件筛选。
python 复制代码
# Excel 文件的多条件筛选
multi_filtered_df = df.query("(column1 > value1) & (column2 < value2)")
  1. Excel 文件的复杂数据类型处理
    对于包含复杂数据类型(如嵌套列表或字典)的 Excel 文件,可以使用 converters 参数。
python 复制代码
converters = {
    'complex_column': lambda s: eval(s) if s != 'nan' else None
}
df = pd.read_excel('file_with_complex_data.xlsx', converters=converters)
  1. Excel 文件的多索引处理
    使用 set_indexreset_index 方法可以创建或重置多级索引。
python 复制代码
# Excel 文件的多索引处理
multi_index_df = df.set_index(['index_column1', 'index_column2'])
multi_index_df.to_excel('multi_index_file.xlsx', index=True)
# 重置索引
reset_df = multi_index_df.reset_index()
  1. Excel 文件的动态数组支持
    如果你使用的是 Excel 365,可以使用动态数组功能。pandas 可以通过 openpyxl 引擎读取这些数组。
python 复制代码
df = pd.read_excel('file_with_spill.xlsx', engine='openpyxl')
  1. Excel 文件的图表和图像处理
    使用 openpyxl 可以添加或修改 Excel 文件中的图表和图像。
python 复制代码
from openpyxl.drawing.image import Image
from openpyxl.chart import BarChart, Reference

img = Image('path_to_image.png')
img.width = 100
img.height = 100
ws.add_image(img, 'A1')

# 添加图表
data = Reference(ws, min_col=1, min_row=1, max_col=1, max_row=10)
bar_chart = BarChart(data)
ws.add_chart(bar_chart, 'G2')
  1. Excel 文件的宏和VBA代码处理
    使用 xlwings 可以运行 Excel 文件中的宏和VBA代码。
python 复制代码
import xlwings as xw

wb = xw.Book('file_with_macros.xlsm')
wb.macro('ModuleName.MacroName')
wb.save()
wb.close()
  1. Excel 文件的密码保护处理
    使用 openpyxl 可以设置或修改 Excel 文件的密码。
python 复制代码
from openpyxl.worksheet.protection import SheetProtection

protection = SheetProtection(sheet=ws, password="your_password")
  1. Excel 文件的自定义函数
    使用 xlwings 可以创建自定义函数并在 Excel 中使用。
python 复制代码
import xlwings as xw

@xw.func
@xw.arg('num', int)
@xw.ret(int)
def custom_function(num):
    return num * 2

wb = xw.Book('file.xlsx')
wb.apis['custom_function'] = custom_function
wb.save()
wb.close()
  1. Excel 文件的自动化测试
    使用 xlwings 可以自动化测试 Excel 文件。
python 复制代码
import xlwings as xw

wb = xw.Book('test_file.xlsm')
test_results = wb.macro('RunAllTests')
print(test_results)
wb.close()
相关推荐
深度学习lover38 分钟前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
XiaoLeisj2 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
API快乐传递者2 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
励志成为嵌入式工程师3 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉3 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer3 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
阡之尘埃4 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
记录成长java5 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
前端青山5 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js