根据年份和月份进行分组,降水量按月求和,气温按月求平均

import os
import pandas as pd

# 获取文件夹路径
folder_path = r'D:\R\summer'

# 获取文件夹中所有.xlsx文件的路径
file_paths = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith('.xlsx')]

# 遍历每个文件
for file_path in file_paths:
    # 读取文件
    data = pd.read_excel(file_path)
    
    # 根据年份和月份进行分组,降水量按月求和,气温按月求平均
    grouped = data.groupby(['YEAR', 'MONTH']).agg({'PRCP': 'sum', 'TEMP': 'mean'}).reset_index()
    
    # 将处理后的数据保存到新的文件中
    output_path = os.path.join(folder_path, f'{os.path.splitext(os.path.basename(file_path))[0]}_processed.xlsx')
    grouped.to_excel(output_path, index=False)
    
    print(f"Processed file saved to: {output_path}")

这段代码的作用是遍历指定文件夹中的所有 `.xlsx` 文件,读取每个文件的数据,然后根据年份和月份进行分组,计算降水量的总和和气温的平均值,并将处理后的数据保存到新的文件中。

现在让我们逐个解析每个函数的含义、用法和举例:

1. **`os.path.join(folder_path, f)`:**

   - **含义:** 将文件夹路径和文件名拼接成完整的文件路径。
   
   - **用法:** `os.path.join()` 函数接受多个路径组件作为参数,并将它们连接起来,返回一个完整的路径字符串。
   
   - **示例:**
     ```python
     import os

     folder_path = r'D:\R\summer'
     file_name = 'data.xlsx'
     file_path = os.path.join(folder_path, file_name)
     ```

2. **`os.listdir(folder_path)`:**

   - **含义:** 返回指定目录中的文件和文件夹的列表。
   
   - **用法:** `os.listdir()` 函数接受一个路径作为参数,并返回指定目录中所有文件和文件夹的名称列表。
   
   - **示例:**
     ```python
     import os

     folder_path = r'D:\R\summer'
     files_and_folders = os.listdir(folder_path)
     ```

3. **`f.endswith('.xlsx')`:**

   - **含义:** 检查字符串是否以指定的后缀结尾。
   
   - **用法:** `endswith()` 方法接受一个后缀字符串作为参数,并返回布尔值,指示字符串是否以指定后缀结尾。
   
   - **示例:**
     ```python
     file_name = 'data.xlsx'
     if file_name.endswith('.xlsx'):
         print("文件名以.xlsx结尾")
     ```

4. **`pd.read_excel(file_path)`:**

   - **含义:** 从 Excel 文件中读取数据并返回 DataFrame。
   
   - **用法:** `pd.read_excel()` 函数接受文件路径作为参数,并返回一个 DataFrame,其中包含了 Excel 文件中的数据。
   
   - **示例:**
     ```python
     import pandas as pd

     file_path = r'D:\R\summer\data.xlsx'
     data = pd.read_excel(file_path)
     ```

5. **`data.groupby(['YEAR', 'MONTH']).agg({'PRCP': 'sum', 'TEMP': 'mean'}).reset_index()`:**

   - **含义:** 根据指定的列进行分组,然后对每个分组应用聚合函数,最后重置索引。
   
   - **用法:** `groupby()` 方法接受一个列名列表作为参数,指定按哪些列进行分组;`agg()` 方法接受一个字典作为参数,指定对哪些列应用哪些聚合函数;`reset_index()` 方法将分组的索引重置为默认值。
   
   - **示例:**
     ```python
     grouped = data.groupby(['YEAR', 'MONTH']).agg({'PRCP': 'sum', 'TEMP': 'mean'}).reset_index()
     ```

6. **`grouped.to_excel(output_path, index=False)`:**

   - **含义:** 将 DataFrame 的数据保存到 Excel 文件中。
   
   - **用法:** `to_excel()` 方法接受一个文件路径作为参数,并将 DataFrame 中的数据保存到指定的 Excel 文件中;`index=False` 参数指定不将 DataFrame 的索引写入到 Excel 文件中。
   
   - **示例:**
     ```python
     output_path = r'D:\R\summer\data_processed.xlsx'
     grouped.to_excel(output_path, index=False)
     ```

这些就是代码中各个函数的含义、用法和示例。通过理解这些函数,你就能够完整地理解这段代码的功能。

7. **`print(f"Processed file saved to: {output_path}")`:**

   - **含义:** 打印消息,指示处理后的文件已保存到指定路径。
   
   - **用法:** `print()` 函数用于在控制台输出消息,使用 `f-string`(格式化字符串字面值)将变量的值插入到消息中。
   
   - **示例:**
     ```python
     output_path = r'D:\R\summer\data_processed.xlsx'
     print(f"Processed file saved to: {output_path}")
     ```

这个 `print` 语句将输出一条消息,指示处理后的文件已保存到指定路径。消息中的 `{output_path}` 将被替换为实际的文件路径。

综上所述,这段代码的作用是遍历指定文件夹中的所有 `.xlsx` 文件,读取每个文件的数据,然后根据年份和月份进行分组,计算降水量的总和和气温的平均值,并将处理后的数据保存到新的文件中。在处理每个文件后,它会打印消息,指示处理后的文件已保存到指定路径。

8. **`os.path.splitext(os.path.basename(file_path))[0]`:**

   - **含义:** 从文件路径中提取文件名(不包括扩展名)。
   
   - **用法:** `os.path.basename()` 函数返回路径的最后一个组成部分(即文件名),`os.path.splitext()` 函数将文件名分割成文件名和扩展名的元组,然后取第一个元素(文件名部分)。
   
   - **示例:**
     ```python
     import os

     file_path = r'D:\R\summer\data.xlsx'
     file_name = os.path.splitext(os.path.basename(file_path))[0]
     ```

   在示例中,`file_name` 的值将是 `'data'`,即文件名去除了扩展名。

9. **`os.path.join(folder_path, f'{os.path.splitext(os.path.basename(file_path))[0]}_processed.xlsx')`:**

   - **含义:** 构建处理后的文件的路径。
   
   - **用法:** 将文件夹路径和新文件名拼接起来,其中新文件名由原文件名去除扩展名后加上 '_processed.xlsx' 组成。
   
   - **示例:**
     ```python
     import os

     folder_path = r'D:\R\summer'
     file_path = r'D:\R\summer\data.xlsx'
     output_path = os.path.join(folder_path, f'{os.path.splitext(os.path.basename(file_path))[0]}_processed.xlsx')
     ```

   在示例中,`output_path` 的值将是 `'D:\R\summer\data_processed.xlsx'`,即原文件名去除了扩展名后加上 '_processed.xlsx'。

这些函数的含义、用法和示例解释了代码中涉及的每个步骤。通过这些步骤,代码实现了对指定文件夹中的所有 `.xlsx` 文件进行处理,并将处理后的结果保存到新文件中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

___Y1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值