赞
踩
要在Python中处理Excel文件,可以使用openpyxl库来处理.xlsx文件,或者使用xlrd和xlwt(或其升级版openpyxl)来处理.xls文件。
请注意,你需要先安装
pandas
和openpyxl
库才能运行代码。可以使用以下命令安装:
pip install pandas openpyxl
读取 Excel 文件
使用 pandas.read_excel()
函数可以读取 Excel 文件。
import pandas as pd
# 读取 Excel 文件
df = pd.read_excel('path_to_your_excel_file.xlsx')
print(df)
写入数据到 Excel
使用 DataFrame.to_excel()
方法可以将数据写入 Excel 文件。
# 写入数据到 Excel
df.to_excel('output_file.xlsx', index=False)
选择特定的列
使用列名来选择 DataFrame 中的列。
# 选择特定的列
selected_columns = df[['column1', 'column2']]
print(selected_columns)
筛选数据
使用布尔索引来筛选数据。
# 筛选数据
filtered_data = df[df['column1'] > value]
print(filtered_data)
添加新列
可以直接通过赋值来添加新列。
# 添加新列
df['new_column'] = df['existing_column'] * 2
print(df)
删除列
使用 drop
方法来删除列。
# 删除列
df = df.drop('column_to_drop', axis=1)
print(df)
保存修改后的 DataFrame
使用 to_excel
方法保存修改后的 DataFrame。
# 保存修改后的 DataFrame
df.to_excel('modified_file.xlsx', index=False)
处理大型 Excel 文件
如果 Excel 文件非常大,可以使用 dtype
参数指定列的数据类型来减少内存使用。
# 处理大型 Excel 文件
df = pd.read_excel('large_file.xlsx', dtype={'column1': 'int32'})
使用 openpyxl
引擎
对于 .xlsx
文件,pandas
默认使用 xlrd
引擎,但你也可以使用 openpyxl
引擎。
# 使用 openpyxl 引擎
df = pd.read_excel('file.xlsx', engine='openpyxl')
合并多个 Excel 工作表
使用 ExcelFile
类来读取整个 Excel 文件,然后可以访问不同的工作表。
# 合并多个 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 数据。以下是一些额外的操作和代码示例:
设置 Excel 文件的编码
有时 Excel 文件可能使用特定的编码,可以通过设置 encoding
参数来读取。
# 设置 Excel 文件的编码
df = pd.read_excel('file.xlsx', encoding='utf-8')
读取特定工作表
默认情况下,pandas
读取第一个工作表。你可以指定 sheet_name
参数来读取特定的工作表。
# 读取特定工作表
df = pd.read_excel('file.xlsx', sheet_name='Sheet2')
跳过行和列
使用 skiprows
和 usecols
参数来跳过行和选择列。
# 跳过行和列
df = pd.read_excel('file.xlsx', skiprows=1, usecols=['column1', 'column2'])
处理日期和时间
如果 Excel 文件包含日期和时间数据,可以使用 parse_dates
参数来确保正确解析。
# 处理日期和时间
df = pd.read_excel('file.xlsx', parse_dates=['date_column'])
数据分组和聚合
使用 groupby
方法对数据进行分组,并使用聚合函数如 sum
, mean
等。
# 数据分组和聚合
grouped_data = df.groupby('group_column').sum()
print(grouped_data)
数据重塑
使用 pivot_table
方法进行数据重塑。
# 数据重塑
pivot_table = pd.pivot_table(df, values='value_column', index='row_column', columns='column_column', aggfunc='mean')
print(pivot_table)
条件过滤
使用 query
方法进行复杂的条件过滤。
# 条件过滤
filtered_data = df.query('column1 > value & column2 < another_value')
print(filtered_data)
Excel 文件的样式和格式
使用 openpyxl
库,你可以设置 Excel 文件的样式和格式。
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')
批量读取和写入 Excel 文件
使用循环可以批量处理多个 Excel 文件。
# 批量读取和写入 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)
使用 xlwings
进行更高级的 Excel 操作
xlwings
是另一个库,可以提供与 Excel 的更深层次的交互,如调用宏、修改公式等。
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
:
pip install xlwings
concat
函数。# 合并多个 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)
pandas
会计算 Excel 文件中的公式。如果需要保留公式,可以使用 data_only=True
。# 处理 Excel 文件中的公式
df = pd.read_excel('file_with_formulas.xlsx', data_only=True)
dtype
避免数据类型问题# 使用 dtype 避免数据类型问题
dtypes = {'column1': 'int32', 'column2': 'float32'}
df = pd.read_excel('file.xlsx', dtype=dtypes)
pandas
通常不会保留合并单元格的信息。如果你需要处理合并单元格,可能需要使用 openpyxl
。# 使用 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)
ExcelWriter
保存 DataFrameExcelWriter
可以保存一个或多个 DataFrame 到不同的工作表。# 使用 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')
style
函数可以设置 Excel 单元格的格式。# 设置 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')
pivot
进行数据透视pivot
方法可以用来创建数据透视表。# 使用 pivot 进行数据透视
pivot_df = df.pivot(index='row_column', columns='column_column', values='value_column')
print(pivot_df)
melt
重塑 DataFramemelt
方法可以将宽格式的 DataFrame 转换为长格式。# 使用 melt 重塑 DataFrame
melted_df = df.melt(id_vars=['id_column'], value_vars=['column1', 'column2'], var_name='column_name', value_name='value')
print(melted_df)
pd.read_excel()
的 if_sheet_exists
参数。# Excel 文件的版本控制
df = pd.read_excel('file.xlsx', if_sheet_exists='Sheet2')
openpyxl
可以读取和修改 Excel 文件中的超链接。# 处理 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)
eval
读取 Excel 文件中的公式结果openpyxl
引擎并设置 engine='openpyxl'
和 mode='values'
。df = pd.read_excel('file_with_formulas.xlsx', engine='openpyxl', mode='values')
openpyxl
可以调整 Excel 文件的列宽和行高。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')
sort_values
方法可以对 DataFrame 进行排序。# Excel 文件的排序
sorted_df = df.sort_values(by='column_to_sort', ascending=True)
sorted_df.to_excel('sorted_file.xlsx', index=False)
groupby
和 sort_values
可以对数据进行分组排序。# 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)
dropna
或 fillna
方法可以处理 DataFrame 中的缺失数据。# Excel 文件的缺失数据处理
clean_df = df.dropna(subset=['important_column']) # 删除含有缺失值的行
# 或者
filled_df = df.fillna(value={'default_value_column': 'default_value'}) # 填充缺失值
# 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))]
query
方法可以进行多条件筛选。# Excel 文件的多条件筛选
multi_filtered_df = df.query("(column1 > value1) & (column2 < value2)")
converters
参数。converters = {
'complex_column': lambda s: eval(s) if s != 'nan' else None
}
df = pd.read_excel('file_with_complex_data.xlsx', converters=converters)
set_index
和 reset_index
方法可以创建或重置多级索引。# 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()
pandas
可以通过 openpyxl
引擎读取这些数组。df = pd.read_excel('file_with_spill.xlsx', engine='openpyxl')
openpyxl
可以添加或修改 Excel 文件中的图表和图像。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')
xlwings
可以运行 Excel 文件中的宏和VBA代码。import xlwings as xw
wb = xw.Book('file_with_macros.xlsm')
wb.macro('ModuleName.MacroName')
wb.save()
wb.close()
openpyxl
可以设置或修改 Excel 文件的密码。from openpyxl.worksheet.protection import SheetProtection
protection = SheetProtection(sheet=ws, password="your_password")
xlwings
可以创建自定义函数并在 Excel 中使用。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()
xlwings
可以自动化测试 Excel 文件。import xlwings as xw
wb = xw.Book('test_file.xlsm')
test_results = wb.macro('RunAllTests')
print(test_results)
wb.close()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。