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

处理DataFrame列NaN值时遇TypeError,求跳过NaN行的优化方案

解决方法

报错原因是np.nan属于float类型,而字符串的replace()方法要求第一个参数必须是字符串类型,碰到NaN就会触发类型错误。要跳过含NaN的行,只对substring非空的行执行替换,有几种优雅的实现方式:

1. 修改列表推导式,增加非空判断

直接在原列表推导式里加条件,判断substring不为NaN时才执行替换:

import pandas as pd
import numpy as np

df = pd.DataFrame({
  "string": ["foo", "moo", "too"],
  "substring": ["oo", "m", np.nan]
})
df['string'] = [a.replace(b, '') if pd.notna(b) else a for a, b in zip(df['string'], df['substring'])]

2. 使用pandas的apply方法(按行处理)

用apply遍历每一行,结合条件判断实现需求:

df['string'] = df.apply(lambda row: row['string'].replace(row['substring'], '') if pd.notna(row['substring']) else row['string'], axis=1)

3. 向量化操作(适合大数据量)

利用pandas的掩码(mask)和str.replace实现向量化处理,效率更高:

mask = df['substring'].notna()
# 仅对substring非空的行执行替换,注意regex=False避免将substring当作正则表达式解析
df.loc[mask, 'string'] = df.loc[mask, 'string'].str.replace(df.loc[mask, 'substring'], '', regex=False)

如果数据量较小,前两种方法足够简洁;如果处理大规模数据集,第三种向量化操作的性能优势更明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:15:36