如何用Pandas实现DataFrame按列非空优先级取值生成新列
实现步骤
- 首先确保你的空值已被Pandas识别为
NaN,如果原始数据中空值是空白字符串,可以先做统一替换:
import pandas as pd import numpy as np # 读取数据时自动跳过值前面的多余空格 df = pd.read_csv("你的文件路径.csv", skipinitialspace=True) # 如果空值是空白字符串,先替换为NaN df = df.replace(r'^\s*$', np.nan, regex=True)
- 按规则生成目标列,直接使用
fillna方法即可实现优先级取值:
# col_a2非空取col_a2,否则取col_a1 df["Column A"] = df["col_a2"].fillna(df["col_a1"]) # col_b1非空取col_b1,否则取col_b2 df["Column B"] = df["col_b1"].fillna(df["col_b2"]) # 提取仅需要的两列得到最终结果 result = df[["Column A", "Column B"]]
备选写法
你也可以用np.where实现相同逻辑,可读性更强:
df["Column A"] = np.where(df["col_a2"].notna(), df["col_a2"], df["col_a1"]) df["Column B"] = np.where(df["col_b1"].notna(), df["col_b1"], df["col_b2"])
内容的提问来源于stack exchange,提问作者Chandan N
相关产品推荐
相关产品推荐

