如何修改Python函数提取pandas DataFrame中首个非null且非空的字符串值
修改方案
原有first_valid_index()仅能识别pandas原生的NaN/NaT等空值,无法识别""类空字符串,你可以先将目标列的空字符串替换为标准空值后再做筛选,修改后的代码如下:
import pandas as pd def get_first_non_null_values(df): first_non_null_values = [] # 单列过滤逻辑:返回首个非空、非空字符串的取值 def fetch_first(series): processed = series.replace("", pd.NA) valid_idx = processed.first_valid_index() return processed.loc[valid_idx] if valid_idx is not None else None try: kst_val = fetch_first(df['kst']) # 若kst列全为空/空字符串,fallback到kst22 if kst_val is None: raise ValueError("kst列无符合条件的值") first_non_null_values.append(kst_val) except: kst_val = fetch_first(df['kst22']) first_non_null_values.append(kst_val) return first_non_null_values first_non_null_values = get_first_non_null_values(df_merged)
核心改动点
- 新增
fetch_first工具函数,统一处理单列的空字符串转标准空值逻辑,first_valid_index()会自动同时过滤原空值和转换后的空字符串对应行 - 保留了原有的try-except调用逻辑,和你原有代码的执行逻辑保持一致
- 增加了kst列全为空场景的判断,自动降级到kst22列取值
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

