在数据密集的工作环境中,我们经常需要从多个Excel文件中提取指定的数据.这种重复性的工作不仅枯燥,还非常耗时.今天,我将分享如何使用Python实现从成千上万个Excel文件中自动提取数据的方法,让你几秒钟完成5000分钟的工作,彻底告别枯燥重复工作.
案例背景
假设你是一个数据分析师,需要从不同部门上传的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知识和人工智能AI与大家共享,同时,如果你觉得这篇文章对你有帮助,不妨点个赞,并点击关注.动动你发财的手,万分感谢!!!
-
原创文章不易,求点赞、在看、转发或留言,这样对我创作下一个精美文章会有莫大的动力!