pandas+openpyxl处理Excel
1. 读取多个 Excel 文件并合并
假设你有一个文件夹,里面包含多个 Excel 文件,你想将这些文件合并成一个 DataFrame。
import pandas as pd
import os
# 文件夹路径
folder_path = 'path/to/your/excel/files'
# 获取文件夹中的所有 Excel 文件
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]
# 创建一个空的 DataFrame 来存储所有数据
all_data = pd.DataFrame()
# 逐个读取每个 Excel 文件并将数据追加到 all_data 中
for file in excel_files:
file_path = os.path.join(folder_path, file)
df = pd.read_excel(file_path)
all_data = pd.concat([all_data, df], ignore_index=True)
# 查看合并后的数据
print(all_data.head())
__
2. 批量处理多个 Excel 文件
假设你需要对多个 Excel 文件进行相同的处理(例如,添加一列、过滤数据等)。
import pandas as pd
import os
# 文件夹路径
folder_path = 'path/to/your/excel/files'
output_folder = 'path/to/output/folder'
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
# 获取文件夹中的所有 Excel 文件
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]
# 处理每个 Excel 文件
for file in excel_files:
file_path = os.path.join(folder_path, file)
df = pd.read_excel(file_path)
# 添加一列
df['New_Column'] = 'Some Value'
# 过滤数据
filtered_df = df[df['Some_Column'] > 100]
# 保存处理后的数据
output_file_path = os.path.join(output_folder, file)
filtered_df.to_excel(output_file_path, index=False)
print("Processing complete.")
__
3. 从多个 Excel 文件中提取特定信息
假设你需要从多个 Excel 文件中提取特定的信息(例如,某个特定单元格的数据)。
import pandas as pd
import os
# 文件夹路径
folder_path = 'path/to/your/excel/files'
# 获取文件夹中的所有 Excel 文件
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]
# 存储结果
results = []
# 从每个 Excel 文件中提取特定信息
for file in excel_files:
file_path = os.path.join(folder_path, file)
df = pd.read_excel(file_path)
# 假设我们需要提取第一行第一列的数据
specific_value = df.iloc[0, 0]
# 将结果存储在一个列表中
results.append((file, specific_value))
# 打印结果
for file, value in results:
print(f"File: {file}, Specific Value: {value}")
__
4. 使用 openpyxl 处理多个 Excel 文件
如果你需要更细粒度地控制 Excel 文件(例如,修改特定单元格、格式化等),可以使用 openpyxl 库。
import openpyxl
import os
# 文件夹路径
folder_path = 'path/to/your/excel/files'
output_folder = 'path/to/output/folder'
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
# 获取文件夹中的所有 Excel 文件
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]
# 处理每个 Excel 文件
for file in excel_files:
file_path = os.path.join(folder_path, file)
workbook = openpyxl.load_workbook(file_path)
sheet = workbook.active
# 修改特定单元格
sheet['A1'] = 'New Value'
# 保存处理后的文件
output_file_path = os.path.join(output_folder, file)
workbook.save(output_file_path)
print("Processing complete.")
__
5. 合并多个 Excel 文件到一个工作簿的不同工作表
假设你有多个 Excel 文件,并希望将它们合并到一个新的 Excel 工作簿中的不同工作表中。
import pandas as pd
import os
# 文件夹路径
folder_path = 'path/to/your/excel/files'
output_file = 'merged_workbook.xlsx'
# 获取文件夹中的所有 Excel 文件
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]
# 创建一个新的 ExcelWriter 对象
with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
# 处理每个 Excel 文件并将数据写入不同的工作表
for file in excel_files:
file_path = os.path.join(folder_path, file)
df = pd.read_excel(file_path)
# 使用文件名作为工作表名称
sheet_name = os.path.splitext(file)[0]
# 写入数据
df.to_excel(writer, sheet_name=sheet_name, index=False)
print("Merging complete.")
__
6. 批量处理多个 Excel 文件并进行数据清洗
假设你需要对多个 Excel 文件进行数据清洗,例如删除空行、填充缺失值等。
import pandas as pd
import os
# 文件夹路径
folder_path = 'path/to/your/excel/files'
output_folder = 'path/to/output/folder'
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
# 获取文件夹中的所有 Excel 文件
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]
# 处理每个 Excel 文件
for file in excel_files:
file_path = os.path.join(folder_path, file)
df = pd.read_excel(file_path)
# 删除空行
df.dropna(how='all', inplace=True)
# 填充缺失值
df.fillna(0, inplace=True)
# 保存处理后的数据
output_file_path = os.path.join(output_folder, file)
df.to_excel(output_file_path, index=False)
print("Data cleaning complete.")
__
7. 从多个 Excel 文件中提取特定列并合并
假设你需要从多个 Excel 文件中提取特定列,并将这些列合并成一个新的 DataFrame。
import pandas as pd
import os
# 文件夹路径
folder_path = 'path/to/your/excel/files'
# 获取文件夹中的所有 Excel 文件
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]
# 创建一个空的 DataFrame 来存储所有数据
all_data = pd.DataFrame()
# 逐个读取每个 Excel 文件并提取特定列
for file in excel_files:
file_path = os.path.join(folder_path, file)
df = pd.read_excel(file_path, usecols=['Column1', 'Column2'])
# 将提取的数据追加到 all_data 中
all_data = pd.concat([all_data, df], ignore_index=True)
# 查看合并后的数据
print(all_data.head())
__
8. 批量重命名多个 Excel 文件中的工作表
假设你需要批量重命名多个 Excel 文件中的工作表名称。
import openpyxl
import os
# 文件夹路径
folder_path = 'path/to/your/excel/files'
output_folder = 'path/to/output/folder'
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
# 获取文件夹中的所有 Excel 文件
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]
# 处理每个 Excel 文件
for file in excel_files:
file_path = os.path.join(folder_path, file)
workbook = openpyxl.load_workbook(file_path)
# 重命名工作表
if 'OldSheetName' in workbook.sheetnames:
sheet = workbook['OldSheetName']
sheet.title = 'NewSheetName'
# 保存处理后的文件
output_file_path = os.path.join(output_folder, file)
workbook.save(output_file_path)
print("Sheet renaming complete.")
__
9. 批量导出 Excel 数据到 CSV 文件
假设你需要将多个 Excel 文件中的数据批量导出为 CSV 文件。
import pandas as pd
import os
# 文件夹路径
folder_path = 'path/to/your/excel/files'
output_folder = 'path/to/output/csvs'
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
# 获取文件夹中的所有 Excel 文件
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]
# 处理每个 Excel 文件
for file in excel_files:
file_path = os.path.join(folder_path, file)
df = pd.read_excel(file_path)
# 生成输出文件路径
base_name = os.path.splitext(file)[0]
output_file_path = os.path.join(output_folder, f'{base_name}.csv')
# 导出为 CSV 文件
df.to_csv(output_file_path, index=False)
print("Export to CSV complete.")
__
10. 批量处理多个 Excel 文件并进行数据分析
假设你需要对多个 Excel 文件进行数据分析,例如计算总和、平均值等。
import pandas as pd
import os
# 文件夹路径
folder_path = 'path/to/your/excel/files'
# 获取文件夹中的所有 Excel 文件
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]
# 创建一个空的 DataFrame 来存储所有数据
all_data = pd.DataFrame()
# 逐个读取每个 Excel 文件并将数据追加到 all_data 中
for file in excel_files:
file_path = os.path.join(folder_path, file)
df = pd.read_excel(file_path)
# 将数据追加到 all_data 中
all_data = pd.concat([all_data, df], ignore_index=True)
# 进行数据分析
total_sum = all_data['Some_Column'].sum()
average_value = all_data['Some_Column'].mean()
# 打印结果
print(f"Total Sum: {total_sum}")
print(f"Average Value: {average_value}")
__