Pandas如何使用其他列的部分值填充指定列的NaN值
问题原因
原有代码中 df.venue.str.split()[0] 取的是venue列所有值分割后生成的列表Series的首个元素,也就是第一行venue的分割结果,属于固定值,因此所有空行都会被填充为同一个值。
正确实现方案
方案1:向量化操作(性能最优,推荐)
使用str[0]对每一行的分割结果单独取第一个单词,生成和原表行数对齐的Series传入fillna,会自动按索引匹配填充:
df['city'] = df['city'].fillna(df['venue'].str.split(n=1).str[0])
补充说明:
split(n=1)表示仅按第一个空格分割1次,不需要分割整段文本,性能更高,也能避免venue值本身包含多个空格的场景下取到错误的结果。
方案2:行级遍历(适合需要额外自定义判断的场景)
如果需要额外加判断逻辑(比如venue为空时的兜底值),可以用apply逐行处理:
import pandas as pd df['city'] = df.apply( lambda row: row['venue'].split()[0] if pd.isna(row['city']) and pd.notna(row['venue']) else row['city'], axis=1 )
内容的提问来源于stack exchange,提问作者Puneeth G P
相关产品推荐
相关产品推荐

