青海气象站降水数据提取

import os
import pandas as pd
from collections import defaultdict

# 设置文件目录
data_dir = r'D:\气象数据\日值降水、气温、蒸发_1951-1987\日值降水、气温、蒸发\降水'
output_dir = os.path.join(data_dir, '青海')
os.makedirs(output_dir, exist_ok=True)

# 定义要提取的区站号列表
target_stations = {
    '52602', '52707', '52818', '52825', '52836', '52854', '52856', '52863', '52866', '52868', '52869',
    '52875', '52876', '52877', '52908', '52941', '52943', '52955', '52957', '52963', '52968', '52972',
    '52974', '56004', '56016', '56018', '56021', '56029', '56033', '56034', '56043', '56045', '56046',
    '56065', '56067', '56125', '56151'
}

# 初始化一个defaultdict来存储每个区站号的数据
data_dict = defaultdict(pd.DataFrame)

# 遍历目录中的所有.xlsx文件
for filename in os.listdir(data_dir):
    if filename.endswith('.xlsx'):
        filepath = os.path.join(data_dir, filename)
        df = pd.read_excel(filepath)
        
        # 确保区站号为字符串类型
        df['区站号'] = df['区站号'].astype(str)
        
        # 筛选出目标区站号的数据
        filtered_df = df[df['区站号'].isin(target_stations)]
        
        # 将筛选后的数据添加到对应的区站号数据集中
        for station_id, group in filtered_df.groupby('区站号'):
            data_dict[station_id] = pd.concat([data_dict[station_id], group])

# 按区站号分组并保存到各自文件
for station_id, data in data_dict.items():
    if not data.empty:
        # 按年、月、日排序
        data = data.sort_values(by=['年', '月', '日'])
        
        # 保存到对应的文件
        output_filepath = os.path.join(output_dir, f'{station_id}.xlsx')
        data.to_excel(output_filepath, index=False)

print("数据处理完成!")

让我们逐个解析这段代码中每个函数的含义、用法,并举例说明:

1. **`os.makedirs(output_dir, exist_ok=True)`:**
   - **含义:** 创建目录,包括所有必要的中间目录。如果目标目录已经存在,则不会引发异常。
   - **用法:** `os.makedirs()` 函数用于创建目录,第一个参数是要创建的目录路径,第二个参数 `exist_ok=True` 表示如果目标目录已经存在,不会抛出异常。
   - **示例:**
     ```python
     import os

     output_dir = r'D:\气象数据\日值降水、气温、蒸发_1951-1987\日值降水、气温、蒸发\降水\青海'
     os.makedirs(output_dir, exist_ok=True)
     ```

2. **`pd.read_excel(filepath)`:**
   - **含义:** 从 Excel 文件中读取数据并返回 DataFrame。
   - **用法:** `pd.read_excel()` 函数用于从 Excel 文件中读取数据,参数是 Excel 文件的路径。
   - **示例:**
     ```python
     import pandas as pd

     filepath = r'D:\气象数据\日值降水、气温、蒸发_1951-1987\日值降水、气温、蒸发\降水\example.xlsx'
     df = pd.read_excel(filepath)
     ```

3. **`df['区站号'].astype(str)`:**
   - **含义:** 将 DataFrame 中的某一列数据类型转换为字符串类型。
   - **用法:** 使用 DataFrame 的 `astype()` 方法将指定列的数据类型转换为字符串类型。
   - **示例:**
     ```python
     df['区站号'] = df['区站号'].astype(str)
     ```

4. **`df[df['区站号'].isin(target_stations)]`:**
   - **含义:** 筛选出 DataFrame 中指定列的值在给定列表中的行。
   - **用法:** 使用布尔索引和 `isin()` 方法来筛选数据。
   - **示例:**
     ```python
     target_stations = ['52602', '52707', '52818']
     filtered_df = df[df['区站号'].isin(target_stations)]
     ```

5. **`pd.concat([data_dict[station_id], group])`:**
   - **含义:** 将多个 DataFrame 连接(合并)成一个。
   - **用法:** 使用 `pd.concat()` 函数将 DataFrame 连接在一起。
   - **示例:**
     ```python
     import pandas as pd

     df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
     df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
     combined_df = pd.concat([df1, df2])
     ```

6. **`data.to_excel(output_filepath, index=False)`:**
   - **含义:** 将 DataFrame 写入到 Excel 文件中。
   - **用法:** 使用 DataFrame 的 `to_excel()` 方法将数据写入到 Excel 文件中。
   - **示例:**
     ```python
     data.to_excel('output.xlsx', index=False)
     ```

这些就是代码中每个函数的含义、用法及示例。通过理解这些函数的作用,你可以更好地理解整段代码的功能和执行流程。

7. **`data = data.sort_values(by=['年', '月', '日'])`:**
   - **含义:** 对 DataFrame 按照指定列进行排序。
   - **用法:** 使用 DataFrame 的 `sort_values()` 方法按照指定列对数据进行排序。
   - **示例:**
     ```python
     data = data.sort_values(by=['年', '月', '日'])
     ```

8. **`os.path.join(output_dir, f'{station_id}.xlsx')`:**
   - **含义:** 将目录路径和文件名拼接成完整的文件路径。
   - **用法:** 使用 `os.path.join()` 函数将目录路径和文件名拼接起来。
   - **示例:**
     ```python
     import os

     output_dir = r'D:\output'
     station_id = '52602'
     output_filepath = os.path.join(output_dir, f'{station_id}.xlsx')
     ```

9. **`os.listdir(data_dir)`:**
   - **含义:** 返回指定目录中的文件和子目录的列表。
   - **用法:** 使用 `os.listdir()` 函数获取指定目录下的所有文件和子目录。
   - **示例:**
     ```python
     import os

     data_dir = r'D:\气象数据\日值降水、气温、蒸发_1951-1987\日值降水、气温、蒸发\降水'
     files = os.listdir(data_dir)
     ```

10. **`defaultdict(pd.DataFrame)`:**
    - **含义:** 创建一个默认值为 DataFrame 的 defaultdict 对象。
    - **用法:** 使用 `collections` 模块中的 `defaultdict` 类创建一个默认值为 DataFrame 的字典。
    - **示例:**
      ```python
      from collections import defaultdict
      import pandas as pd

      data_dict = defaultdict(pd.DataFrame)
      ```

11. **`shutil.move(source_file, target_folder)`:**
    - **含义:** 将文件移动到目标文件夹。
    - **用法:** 使用 `shutil.move()` 函数将指定文件移动到目标文件夹。
    - **示例:**
      ```python
      import shutil

      source_file = r'D:\source\example.xlsx'
      target_folder = r'D:\target'
      shutil.move(source_file, target_folder)
      ```

这些是继续解析代码中每个函数的含义、用法及示例。通过理解这些函数,你可以更好地掌握代码的功能和执行流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

___Y1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值