宁夏气象站降水数据提取

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 = {
    '53517', '53518', '53519', '53603', '53610', '53611', '53612', '53614', '53615', '53617', '53618',
    '53619', '53704', '53705', '53707', '53723', '53727', '53806', '53810', '53817', '53881', '53903', 
    '53910', '53914', '53916'
}

# 初始化一个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.path.join()**:
   - **作用**:用于将多个路径组合成一个路径。
   - **用法**:接受任意数量的参数,并将它们连接成一个路径。它会根据操作系统的不同,自动选择正确的路径分隔符。
   - **示例**:`os.path.join('folder', 'subfolder', 'file.txt')` 返回 `folder\subfolder\file.txt`。

2. **os.makedirs()**:
   - **作用**:用于递归创建目录。
   - **用法**:接受目录路径作为参数,并创建该路径指定的目录。如果指定的目录已存在,则不会抛出错误。
   - **示例**:`os.makedirs('new_folder/sub_folder', exist_ok=True)` 将创建 `new_folder` 目录,并在其中创建 `sub_folder` 目录。

3. **defaultdict**:
   - **作用**:是字典的一个子类,在字典中提供了默认值。
   - **用法**:创建时需传递一个可调用对象,例如 `int`、`list`、`set` 或其他函数。当访问字典中不存在的键时,会调用该可调用对象以生成默认值。
   - **示例**:`data_dict = defaultdict(list)` 将创建一个默认值为列表的 defaultdict。

4. **pd.read_excel()**:
   - **作用**:用于从 Excel 文件中读取数据。
   - **用法**:接受 Excel 文件路径作为参数,并返回一个 DataFrame 对象,其中包含 Excel 文件中的数据。
   - **示例**:`df = pd.read_excel('data.xlsx')` 将读取名为 `data.xlsx` 的 Excel 文件,并将数据存储在 DataFrame `df` 中。

5. **df.groupby()**:
   - **作用**:用于按照指定列的值进行分组。
   - **用法**:接受一个或多个列名作为参数,并返回一个 GroupBy 对象,可以对其进行聚合操作。
   - **示例**:`grouped = df.groupby('Column')` 将按照 `Column` 列的值对 DataFrame 进行分组。

6. **pd.concat()**:
   - **作用**:用于沿着指定轴将多个 DataFrame 连接在一起。
   - **用法**:接受一个 DataFrame 列表作为参数,并返回连接后的 DataFrame。
   - **示例**:`concatenated = pd.concat([df1, df2])` 将连接 `df1` 和 `df2` 两个 DataFrame。

7. **data.to_excel()**:
   - **作用**:用于将 DataFrame 数据写入 Excel 文件。
   - **用法**:接受 Excel 文件路径作为参数,并将 DataFrame 中的数据写入到指定的 Excel 文件中。
   - **示例**:`data.to_excel('output.xlsx', index=False)` 将 DataFrame 中的数据写入到名为 `output.xlsx` 的 Excel 文件中,不包含索引。

这些函数在数据处理和文件操作中非常常用,它们能够方便地实现数据的读取、处理和写入,提高了编程效率和代码的可读性。

8. **df.sort_values()**:
   - **作用**:用于按照指定列或多列的值对 DataFrame 进行排序。
   - **用法**:接受一个或多个列名作为参数,并返回一个根据指定列值排序后的 DataFrame。
   - **示例**:`sorted_df = df.sort_values(by=['Column1', 'Column2'])` 将按照 `Column1` 和 `Column2` 列的值对 DataFrame 进行排序。

9. **os.listdir()**:
   - **作用**:用于返回指定目录下的所有文件和文件夹的名称列表。
   - **用法**:接受目录路径作为参数,并返回一个包含目录中所有文件和文件夹名称的列表。
   - **示例**:`files = os.listdir('folder')` 将返回指定目录下的所有文件和文件夹的名称列表。

10. **str.endswith()**:
   - **作用**:用于检查字符串是否以指定后缀结尾。
   - **用法**:接受一个字符串后缀作为参数,并返回 `True` 或 `False`。
   - **示例**:`filename.endswith('.xlsx')` 将返回文件名是否以 `.xlsx` 结尾的布尔值。

11. **pd.DataFrame.astype()**:
   - **作用**:用于将 DataFrame 中指定列的数据类型转换为指定类型。
   - **用法**:接受一个字典或 Series 对象作为参数,其中键是列名,值是要转换的数据类型。
   - **示例**:`df['Column'] = df['Column'].astype(str)` 将 `Column` 列的数据类型转换为字符串类型。

12. **pd.ExcelWriter()**:
   - **作用**:用于创建一个 Excel 文件写入器对象。
   - **用法**:接受 Excel 文件路径作为参数,并返回一个 ExcelWriter 对象,可以通过该对象将多个 DataFrame 数据写入同一个 Excel 文件的不同工作表。
   - **示例**:`writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')` 将创建一个将数据写入到名为 `output.xlsx` 的 Excel 文件的 ExcelWriter 对象。

这些函数都是 Python 数据处理和文件操作中常用的工具,掌握它们的用法可以提高数据处理效率,实现更多的功能。

13. **os.makedirs() 函数**:
   - **作用**:用于创建目录,包括递归创建子目录。
   - **用法**:接受目录路径作为参数,可以选择是否递归创建目录。
   - **示例**:`os.makedirs('new_folder/sub_folder', exist_ok=True)` 将创建 `new_folder` 目录,并在其中创建 `sub_folder` 目录。如果目录已存在,则不会引发异常,通过设置 `exist_ok=True` 来实现。

14. **pd.read_excel() 函数**:
   - **作用**:用于从 Excel 文件中读取数据并创建 DataFrame。
   - **用法**:接受 Excel 文件路径作为参数,并返回一个 DataFrame 对象,其中包含 Excel 文件中的数据。
   - **示例**:`df = pd.read_excel('data.xlsx')` 将读取名为 `data.xlsx` 的 Excel 文件,并将数据存储在 DataFrame `df` 中。

15. **df.groupby() 方法**:
   - **作用**:用于对 DataFrame 进行分组操作。
   - **用法**:接受一个或多个列名作为参数,并返回一个 GroupBy 对象,可以对其进行聚合操作。
   - **示例**:`grouped = df.groupby('Column')` 将按照 `Column` 列的值对 DataFrame 进行分组。

16. **pd.concat() 函数**:
   - **作用**:用于沿着指定轴将多个 DataFrame 连接在一起。
   - **用法**:接受一个 DataFrame 列表作为参数,并返回连接后的 DataFrame。
   - **示例**:`concatenated = pd.concat([df1, df2])` 将连接 `df1` 和 `df2` 两个 DataFrame。

17. **data.to_excel() 方法**:
   - **作用**:用于将 DataFrame 数据写入 Excel 文件。
   - **用法**:接受 Excel 文件路径作为参数,并将 DataFrame 中的数据写入到指定的 Excel 文件中。
   - **示例**:`data.to_excel('output.xlsx', index=False)` 将 DataFrame 中的数据写入到名为 `output.xlsx` 的 Excel 文件中,不包含索引。

这些函数和方法是 Python 中处理数据和文件操作的重要工具,掌握它们的用法可以帮助你更有效地进行数据处理和文件操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

___Y1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值