You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用glob与concat合并CSV时,如何排除Rain列无数据的文件?

自动筛选有效站点数据并合并CSV文件

问题背景

我拥有近2000个站点2022年5-8月的逐小时气温与降雨观测数据,每个站点对应一个CSV文件。已将逐小时数据处理为日均值,保存为StationName - edited.csv格式,处理后的数据样例如下:

df.head()
Out[5]: 
         date      station      lat       lon   Rain   Temp
0  2022-05-01  72750494999  46.5475 -93.67667  100.0  109.4
1  2022-05-02  72750494999  46.5475 -93.67667   93.0   96.8
2  2022-05-03  72750494999  46.5475 -93.67667   93.0   96.8
3  2022-05-04  72750494999  46.5475 -93.67667  100.0   96.8
4  2022-05-05  72750494999  46.5475 -93.67667   87.0   98.6

需要将所有CSV合并为单个文件,但其中约150个文件的Rain列无有效观测数据,手动查找效率极低。要求在合并流程中自动排除这类文件,仅保留同时包含有效Rain和Temp列数据的文件。现有合并代码如下:

import numpy as np
import pandas as pd

# Read all the csv if Folder
import glob
filenames = sorted(glob.glob('*.csv'))
# Create an empty dataset
e = pd.DataFrame()

for f in filenames:
    # read the variables
    df = pd.read_csv(f, index_col=None)

    # I think I should add something here!

    e = pd.concat([e, df], axis=0)

解决方案

在读取每个CSV文件后,添加条件判断:检查Rain列是否存在至少一个有效非空值,同时Temp列也存在至少一个有效非空值。只有满足条件的文件才会被合并到最终数据集里。

修改后的完整代码:

import numpy as np
import pandas as pd
import glob

filenames = sorted(glob.glob('*.csv'))
merged_df = pd.DataFrame()

for f in filenames:
    df = pd.read_csv(f, index_col=None)
    
    # 检查Rain和Temp列是否有至少一个有效非空数据
    has_valid_rain = df['Rain'].notna().any()
    has_valid_temp = df['Temp'].notna().any()
    
    if has_valid_rain and has_valid_temp:
        merged_df = pd.concat([merged_df, df], axis=0)
    else:
        # 可选:打印被排除的文件名,方便后续核查
        print(f"排除无有效数据的文件: {f}")

# 保存合并后的文件
merged_df.to_csv('merged_station_data.csv', index=False)

关键逻辑说明

  • df['Rain'].notna().any():判断Rain列是否存在至少一个非空的有效数据(如果无观测数据表现为全NaN,此判断会返回False)。
  • df['Temp'].notna().any():同理判断Temp列是否有有效数据。
  • 只有当两个条件同时满足时,才将当前文件的数据合并到总数据集中;否则跳过该文件,还可以选择打印被排除的文件名用于后续核对。

内容的提问来源于stack exchange,提问作者babak asadolah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:01:09