工作中经常遇到要将十几个Excel(不管是xls、或者是CSV)合并到同一个文件中去,手工一个一个复制是不可能的,此时就轮到Python出马了
主要是利用for循环,读取每一个文件,作为df,然后再通过list的append加在一起,然后再通过pd.concat拼接起来,最后将文件读到CSV中去
import os
import pandas as pd
import numpy as np
dir = "D:\\merge"#设置工作路径
#新建列表,存放文件名(可以忽略,但是为了做的过程能心里有数,先放上)
filename_excel = []
#新建列表,存放每个文件数据框(每一个
在数据分析和处理任务中,有时候我们需要将多个Excel文件合并成一个大文件,以便于进一步的分析或报告。Python提供了一种高效且灵活的方式来完成这项任务,尤其在处理大量数据时,自动化的优势尤为明显。本篇将详细介绍如何使用Python的pandas库合并多个Excel文件。
确保已经安装了pandas和os库,如果没有安装,可以使用pip进行安装:
```bash
pip install pandas
pip install openpyxl # 如果处理的是xlsx文件,需要此库
```
接下来,我们将使用以下步骤来合并Excel文件:
1. **设置工作路径**:使用`os`库中的`os.walk()`函数遍历指定目录下的所有文件。`os.walk(dir)`会返回一个生成器,依次产生目录树中的三元组 `(root, dirs, files)`,其中`root`是当前目录路径,`dirs`是当前目录下所有子目录名的列表,`files`是当前目录下非目录子文件名的列表。
2. **读取文件**:对于每一个文件,使用`pd.read_excel()`函数将其读取为pandas的DataFrame对象,然后将这些DataFrame存储在一个列表`frames`中。这样,`frames`列表中就包含了所有Excel文件的数据。
3. **合并数据**:使用`pd.concat()`函数将`frames`列表中的DataFrame按行(默认)拼接成一个大的DataFrame。`pd.concat(frames)`会生成一个新的DataFrame,包含所有原始文件的数据。
4. **保存结果**:使用`to_csv()`方法将合并后的DataFrame保存为CSV文件。`result.to_csv('output_path', sep=',', index=False)`表示将结果保存到指定路径,并使用逗号作为分隔符,`index=False`表示不将索引列写入文件。
以下是具体的代码示例:
```python
import os
import pandas as pd
# 设置工作路径
dir = "D:\\merge"
# 新建列表,存放文件名(可忽略,但为了跟踪进度,可以保留)
filename_excel = []
# 新建列表,存放每个文件数据框
frames = []
# 遍历指定目录下的所有文件
for root, dirs, files in os.walk(dir):
for file in files:
# 将文件路径添加到filename_excel列表
filename_excel.append(os.path.join(root, file))
# 读取Excel文件为DataFrame
df = pd.read_excel(os.path.join(root, file))
# 将DataFrame添加到frames列表
frames.append(df)
# 打印文件名
print(filename_excel)
# 合并所有数据
result = pd.concat(frames)
# 查看合并后的数据前几行
result.head()
# 输出合并后的数据形状
result.shape
# 保存合并后的数据到CSV文件
result.to_csv('D:\\merge\\merged_data.csv', sep=',', index=False)
```
以上代码演示了如何使用Python和pandas批量合并Excel文件。注意,这个例子假设所有Excel文件都在同一目录下,且格式一致,可以直接合并。如果文件分布在不同的子目录下,或者文件格式不统一,可能需要在读取文件之前进行预处理,如调整列名或数据类型等。此外,还可以通过调整`pd.concat()`的参数,例如`axis=1`来进行列合并,或者设置`ignore_index=True`来重置合并后的DataFrame的索引。