在数据密集的工作环境中,我们经常需要从多个Excel文件中提取指定的数据.这种重复性的工作不仅枯燥,还非常耗时.今天,我将分享如何使用Python实现从成千上万个Excel文件中自动提取数据的方法,让你几秒钟完成5000分钟的工作,彻底告别枯燥重复工作.
-
这里插播一条粉丝福利,如果你正在学习Python或者有计划学习Python,想要突破自我,对未来十分迷茫的,可以点击这里获取最新的Python学习资料和学习路线规划(免费分享,记得关注)
案例背景
假设你是一个数据分析师,需要从不同部门上传的Excel文件中提取销售数据.每个文件都有不同的格式,但你只需要提取其中某个指定表格的特定列数据,并汇总到一个总表中.
示例
我们将使用以下Python库来实现这个功能:
pandas:用于处理数据.
openpyxl:用于读取和写入Excel文件.
glob:用于查找匹配的文件路径名.
首先,确保你已经安装了这些库.如果没有,请使用以下命令安装:
pip install pandas openpyxl
步骤一:准备数据
假设你有多个Excel文件,文件名格式为data_1.xlsx、data_2.xlsx、……、data_n.xlsx,每个文件都包含如下数据:
data_1.xlsx
| ID | Name | Sales |
|----|------|-------|
| 1 | A | 1000 |
| 2 | B | 1500 |
| 3 | C | 2000 |
data_2.xlsx
| ID | Name | Sales |
|----|------|-------|
| 1 | D | 1200 |
| 2 | E | 1600 |
| 3 | F | 2100 |
步骤二:编写Python代码
以下是实现自动化提取数据的Python代码:
import pandas as pd
import openpyxl
import glob
def extract_data_from_excel(files_pattern, sheet_name, column_name):
# 存储所有提取的数据
all_data = []
# 查找所有匹配的Excel文件
for file in glob.glob(files_pattern):
# 读取Excel文件中的指定工作表
df = pd.read_excel(file, sheet_name=sheet_name)
# 提取指定列的数据
data = df[column_name].tolist()
# 将数据添加到总列表中
all_data.extend(data)
return all_data
# 使用示例
files_pattern = "data_*.xlsx" # 匹配所有以data_开头的Excel文件
sheet_name = "Sheet1" # 工作表名称
column_name = "Sales" # 需要提取的列
# 提取数据
extracted_data = extract_data_from_excel(files_pattern, sheet_name, column_name)
# 打印提取的数据
print("Extracted Data:", extracted_data)
# 将提取的数据保存到新的Excel文件
output_df = pd.DataFrame(extracted_data, columns=[column_name])
output_df.to_excel("extracted_sales_data.xlsx", index=False)
print("Data saved to extracted_sales_data.xlsx")
详细解释
导入库:导入pandas、openpyxl和glob库.
定义函数:extract_data_from_excel函数接受三个参数:文件路径模式、工作表名称和列名称.
查找文件:使用glob.glob查找匹配的Excel文件.
读取和提取数据:循环遍历所有文件,读取指定工作表并提取指定列的数据.
汇总数据:将提取的数据汇总到一个列表中.
保存数据:将汇总的数据保存到一个新的Excel文件中.
输出
假设你有两个文件data_1.xlsx和data_2.xlsx,运行代码后,你会在当前目录下生成一个名为extracted_sales_data.xlsx的新文件,内容如下:
| Sales |
|-------|
| 1000 |
| 1500 |
| 2000 |
| 1200 |
| 1600 |
| 2100 |
进一步优化
你可以进一步优化代码,例如添加错误处理、处理不同格式的Excel文件或指定提取多个列的数据.以下是一个改进版本的代码:
import pandas as pd
import openpyxl
import glob
def extract_data_from_excel(files_pattern, sheet_name, columns):
all_data = []
for file in glob.glob(files_pattern):
try:
df = pd.read_excel(file, sheet_name=sheet_name)
data = df[columns].copy()
all_data.append(data)
except Exception as e:
print(f"Error processing file {file}: {e}")
result_df = pd.concat(all_data, ignore_index=True)
return result_df
# 使用示例
files_pattern = "data_*.xlsx"
sheet_name = "Sheet1"
columns = ["ID", "Name", "Sales"]
extracted_data = extract_data_from_excel(files_pattern, sheet_name, columns)
extracted_data.to_excel("extracted_sales_data.xlsx", index=False)
print("Data saved to extracted_sales_data.xlsx")
-
通过这种方式,你可以更加灵活和高效地处理大量Excel文件,提取你需要的数据,几秒钟完成原本需要花费大量时间的工作.
最后,我精心筹备了一份全面的Python学习大礼包,完全免费分享给每一位渴望成长、希望突破自我现状却略感迷茫的朋友。无论您是编程新手还是希望深化技能的开发者,都欢迎加入我们的学习之旅,共同交流进步!
🌟 学习大礼包包含内容:
Python全领域学习路线图:一目了然,指引您从基础到进阶,再到专业领域的每一步学习路径,明确各方向的核心知识点。
超百节Python精品视频课程:涵盖Python编程的必备基础知识、高效爬虫技术、以及深入的数据分析技能,让您技能全面升级。
实战案例集锦:精选超过100个实战项目案例,从理论到实践,让您在解决实际问题的过程中,深化理解,提升编程能力。
华为独家Python漫画教程:创新学习方式,以轻松幽默的漫画形式,让您随时随地,利用碎片时间也能高效学习Python。
互联网企业Python面试真题集:精选历年知名互联网企业面试真题,助您提前备战,面试准备更充分,职场晋升更顺利。
👉 立即领取方式:只需【点击这里】,即刻解锁您的Python学习新篇章!让我们携手并进,在编程的海洋里探索无限可能