处理合并数据

import pandas as pd
import os

# 主目录
main_directory = r'D:\STI\SPEI_STI01\新疆'

# 遍历主目录下的所有子目录
for subdir, _, _ in os.walk(main_directory):
    # 检查子目录是否为空
    if len(os.listdir(subdir)) > 0:
        # 找到子目录中的STI和SPEI文件
        sti_files = [f for f in os.listdir(subdir) if f.startswith('STI_') and f.endswith('.xlsx')]
        spei_files = [f for f in os.listdir(subdir) if f.endswith('.xlsx') and not f.startswith('STI_')]

        # 检查是否找到了STI和SPEI文件
        if sti_files and spei_files:
            # 读取STI文件的第二列数据
            sti_filename = os.path.join(subdir, sti_files[0])
            sti_df = pd.read_excel(sti_filename)
            sti_data = sti_df.iloc[:, 1]  # 第二列数据
            sti_data.name = 'STI'  # 设置列名

            # 读取SPEI文件的第三列数据
            spei_filename = os.path.join(subdir, spei_files[0])
            spei_df = pd.read_excel(spei_filename)
            spei_data = spei_df.iloc[:, 1]  # 第三列数据
            spei_data.name = 'SPEI'  # 设置列名

            # 合并数据并保存到新表格
            result_df = pd.concat([sti_data, spei_data], axis=1)
            # 获取子目录名作为新文件名的一部分
            subdir_name = os.path.basename(subdir)
            result_filename = os.path.join(subdir, f'STI_SPEI_{subdir_name}.xlsx')
            result_df.to_excel(result_filename, index=False)

让我们解析每个函数的含义、用法,并举例说明:

1. **`import pandas as pd`:**
   - **含义:** 导入 Pandas 库并给它取别名 pd,用于数据处理和分析。
   - **用法:** `pd.read_excel()` 等函数用于读取 Excel 文件,`pd.concat()` 函数用于合并数据。
   - **示例:** `pd.read_excel('file.xlsx')` 用于读取名为 'file.xlsx' 的 Excel 文件。

2. **`import os`:**
   - **含义:** 导入 os 模块,用于操作文件路径。
   - **用法:** `os.path.join()` 函数用于拼接路径,`os.listdir()` 函数用于列出指定目录下的文件和目录。
   - **示例:** `os.path.join('dir', 'file.xlsx')` 用于拼接目录名和文件名。

3. **`main_directory = r'D:\STI\SPEI_STI01\新疆'`:**
   - **含义:** 定义主目录路径,即存放STI和SPEI文件的根目录。
   - **用法:** 用于定义文件夹路径。
   - **示例:** `main_directory = r'C:\Data'` 定义主目录为 'C:\Data'。

4. **`for subdir, _, _ in os.walk(main_directory):`:**
   - **含义:** 使用 os 模块中的 walk 函数遍历主目录及其所有子目录。
   - **用法:** 用于遍历目录树,获取目录路径、子目录列表和文件列表。
   - **示例:** `for root, dirs, files in os.walk('dir'):` 遍历名为 'dir' 的目录。

5. **`pd.read_excel(filename)`:**
   - **含义:** 读取 Excel 文件并返回 DataFrame。
   - **用法:** 用于从 Excel 文件中读取数据。
   - **示例:** `df = pd.read_excel('data.xlsx')` 读取名为 'data.xlsx' 的 Excel 文件。

6. **`pd.concat([df1, df2], axis=1)`:**
   - **含义:** 沿着指定轴连接多个 DataFrame。
   - **用法:** 用于沿着行或列方向合并数据。
   - **示例:** `result_df = pd.concat([df1, df2], axis=1)` 合并两个 DataFrame。

7. **`os.path.basename(subdir)`:**
   - **含义:** 返回路径的最后一个元素,即目录的基本名称。
   - **用法:** 用于获取路径的最后一部分,通常用于获取目录名。
   - **示例:** `basename = os.path.basename('dir/subdir')` 返回 'subdir'。

8. **`result_df.to_excel(filename, index=False)`:**
   - **含义:** 将 DataFrame 写入 Excel 文件。
   - **用法:** 用于将数据保存为 Excel 文件,可以指定是否包含行索引。
   - **示例:** `result_df.to_excel('output.xlsx', index=False)` 将数据保存为 'output.xlsx' 文件,不包含行索引。

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

继续解析代码中使用的函数:

9. **`if len(os.listdir(subdir)) > 0:`:**
   - **含义:** 检查目录是否为空,即是否包含文件或子目录。
   - **用法:** 用于检查目录中是否存在文件或子目录。
   - **示例:** `if len(os.listdir('dir')) > 0:` 检查 'dir' 目录是否为空。

10. **`[f for f in os.listdir(subdir) if f.startswith('STI_') and f.endswith('.xlsx')]`:**
    - **含义:** 列出目录中以 'STI_' 开头且以 '.xlsx' 结尾的文件。
    - **用法:** 用于筛选出满足特定条件的文件列表。
    - **示例:** `[f for f in os.listdir('dir') if f.endswith('.txt')]` 列出目录中所有以 '.txt' 结尾的文件。

11. **`[f for f in os.listdir(subdir) if f.endswith('.xlsx') and not f.startswith('STI_')]`:**
    - **含义:** 列出目录中以 '.xlsx' 结尾但不以 'STI_' 开头的文件。
    - **用法:** 用于筛选出满足特定条件的文件列表。
    - **示例:** `[f for f in os.listdir('dir') if f.startswith('SPEI_')]` 列出目录中所有以 'SPEI_' 开头的文件。

12. **`sti_df.iloc[:, 1]` 和 `spei_df.iloc[:, 1]`:**
    - **含义:** 获取 DataFrame 中的第二列数据。
    - **用法:** 用于选择 DataFrame 中的特定列。
    - **示例:** `df.iloc[:, 1]` 获取 DataFrame 中的第二列数据。

13. **`result_df.to_excel(result_filename, index=False)`:**
    - **含义:** 将 DataFrame 写入 Excel 文件,指定文件名。
    - **用法:** 用于将数据保存为 Excel 文件,并指定文件名。
    - **示例:** `result_df.to_excel('output.xlsx', index=False)` 将数据保存为 'output.xlsx' 文件,不包含行索引。

这些是代码中使用的其他函数的含义、用法和示例。理解了这些函数的作用,你可以更加深入地理解代码的功能和执行逻辑。

14. **`os.path.exists(source_file)`:**
    - **含义:** 检查文件或目录是否存在。
    - **用法:** 用于检查指定的文件或目录是否存在。
    - **示例:** 
    ```python
    source_file = r'D:\STI\SPEI_STI01\新疆\STI_2022.xlsx'
    if os.path.exists(source_file):
        print("文件存在")
    ```

15. **`shutil.move(source_file, target_folder)`:**
    - **含义:** 移动文件或目录到目标位置。
    - **用法:** 用于将指定的文件或目录移动到目标文件夹中。
    - **示例:** 
    ```python
    import shutil

    source_file = r'D:\STI\SPEI_STI01\新疆\STI_2022.xlsx'
    target_folder = r'D:\STI\SPEI_STI01\新疆\青海'
    shutil.move(source_file, target_folder)
    ```

这些是代码中使用的其他函数的含义、用法和示例。通过理解这些函数,你可以更加全面地了解代码的功能和执行流程。

16. **`os.path.join(subdir, f'STI_SPEI_{subdir_name}.xlsx')`:**
    - **含义:** 使用目录路径和文件名拼接出完整的文件路径。
    - **用法:** 用于构建输出文件的完整路径。
    - **示例:**
    ```python
    subdir = r'D:\STI\SPEI_STI01\新疆\2022'
    subdir_name = '2022'
    output_file = os.path.join(subdir, f'STI_SPEI_{subdir_name}.xlsx')
    ```

17. **`result_df.to_excel(output_file, index=False)`:**
    - **含义:** 将 DataFrame 写入 Excel 文件,并指定文件路径,不包括索引列。
    - **用法:** 用于将数据保存为 Excel 文件。
    - **示例:**
    ```python
    import pandas as pd
    
    df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
    output_file = 'output.xlsx'
    df.to_excel(output_file, index=False)
    ```

这些是代码中使用的其他函数的含义、用法和示例。理解了这些函数,你就能更清晰地理解代码的功能和流程。

18. **`pd.concat([sti_data, spei_data], axis=1)`:**
    - **含义:** 沿指定轴将两个 DataFrame 连接起来。
    - **用法:** 用于将两个 DataFrame 沿列方向连接起来,可以指定沿行或列进行连接。
    - **示例:**
    ```python
    import pandas as pd
    
    df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
    df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]})
    result = pd.concat([df1, df2], axis=1)
    ```

19. **`result_df.to_excel(result_filename, index=False)`:**
    - **含义:** 将 DataFrame 中的数据写入 Excel 文件,不包括行索引。
    - **用法:** 用于将 DataFrame 中的数据保存为 Excel 文件。
    - **示例:**
    ```python
    import pandas as pd
    
    data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35]}
    df = pd.DataFrame(data)
    df.to_excel('output.xlsx', index=False)
    ```

这些是代码中使用的其他函数的含义、用法和示例。通过理解这些函数,你就能更好地掌握代码的功能和执行过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

___Y1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值