import pandas as pd
import os
# 定义文件夹路径
folder_path = r'D:\R\month\xinjiang'
# 读取所有.xlsx文件并合并数据
all_data = pd.DataFrame()
for file in os.listdir(folder_path):
if file.endswith('.xlsx'):
file_path = os.path.join(folder_path, file)
df = pd.read_excel(file_path)
all_data = pd.concat([all_data, df])
# 按年份分组并计算平均值
average_data = all_data.groupby('year')['TMED'].mean().reset_index()
# 获取原文件名(不包含后缀)
def get_file_name_without_extension(file_path):
return os.path.splitext(os.path.basename(file_path))[0]
# 将结果保存到新的.xlsx文件中,使用原文件名加上前缀"average_"
for file in os.listdir(folder_path):
if file.endswith('.xlsx'):
file_name = get_file_name_without_extension(file)
output_file = os.path.join(folder_path, f"average_{file_name}.xlsx")
average_data.to_excel(output_file, index=False)
让我们逐个解析代码中每个函数的含义、用法,并附上相应的示例:
1. **`import pandas as pd`:**
- **含义:** 导入 pandas 库,并使用别名 pd。
- **用法示例:**
```python
import pandas as pd
```
2. **`import os`:**
- **含义:** 导入 os 模块,用于处理文件路径等操作。
- **用法示例:**
```python
import os
```
3. **`folder_path = r'D:\R\month\xinjiang'`:**
- **含义:** 定义了文件夹路径,即待处理的文件所在文件夹的路径。
- **用法示例:**
```python
folder_path = r'D:\R\month\xinjiang'
```
4. **`for file in os.listdir(folder_path):`:**
- **含义:** 使用 os 模块中的 listdir 函数遍历文件夹中的文件。
- **用法示例:**
```python
for file in os.listdir(folder_path):
```
5. **`if file.endswith('.xlsx'):`:**
- **含义:** 检查文件名是否以 '.xlsx' 结尾,以过滤出 Excel 文件。
- **用法示例:**
```python
if file.endswith('.xlsx'):
```
6. **`file_path = os.path.join(folder_path, file)`:**
- **含义:** 构建完整的文件路径,包括文件夹路径和文件名。
- **用法示例:**
```python
file_path = os.path.join(folder_path, file)
```
7. **`df = pd.read_excel(file_path)`:**
- **含义:** 使用 pandas 中的 read_excel 函数读取 Excel 文件,并将其转换为 DataFrame。
- **用法示例:**
```python
df = pd.read_excel(file_path)
```
8. **`all_data = pd.concat([all_data, df])`:**
- **含义:** 使用 pandas 中的 concat 函数将当前读取的 DataFrame 与之前的 DataFrame 合并。
- **用法示例:**
```python
all_data = pd.concat([all_data, df])
```
9. **`average_data = all_data.groupby('year')['TMED'].mean().reset_index()`:**
- **含义:** 使用 pandas 的 groupby 函数按照年份对数据进行分组,然后计算每个组中 'TMED' 列的平均值,并将结果重置索引。
- **用法示例:**
```python
average_data = all_data.groupby('year')['TMED'].mean().reset_index()
```
10. **`def get_file_name_without_extension(file_path):`:**
- **含义:** 定义一个函数,用于从文件路径中获取文件名(不包含后缀)。
- **用法示例:**
```python
def get_file_name_without_extension(file_path):
```
11. **`return os.path.splitext(os.path.basename(file_path))[0]`:**
- **含义:** 使用 os 模块中的 splitext 函数和 basename 函数获取文件名(不包含后缀)。
- **用法示例:**
```python
return os.path.splitext(os.path.basename(file_path))[0]
```
12. **`average_data.to_excel(output_file, index=False)`:**
- **含义:** 使用 pandas 中的 to_excel 函数将 DataFrame 写入到 Excel 文件中,不包含行索引。
- **用法示例:**
```python
average_data.to_excel(output_file, index=False)
```
这些是每个函数的含义、用法和示例,它们结合在一起实现了将多个 Excel 文件中的数据合并、计算平均值,并将结果保存到新的 Excel 文件中的功能。
13. **`output_file = os.path.join(folder_path, f"average_{file_name}.xlsx")`:**
- **含义:** 构建输出文件的完整路径,包括文件夹路径和新的文件名(带有前缀 "average_")。
- **用法示例:**
```python
output_file = os.path.join(folder_path, f"average_{file_name}.xlsx")
```
14. **`shutil.move(source_file, target_folder)`:**
- **含义:** 使用 shutil 模块中的 move 函数将源文件移动到目标文件夹中。
- **用法示例:**
```python
shutil.move(source_file, target_folder)
```
这两个是在代码末尾的部分,用于将生成的平均值文件保存到目标文件夹中。