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

如何将Pandas DataFrame列转为str类型且保留空值?

Pandas 保留NaN的同时将列转为Object类型(非NaN元素为字符串)

问题原因

  • 使用astype(str)会把np.nan直接转为字符串'NaN',导致空值统计为0;
  • 用lambda x: np.nan if x is np.nan else str(x)失效,是因为Pandas中部分空值(如pd.NA)或特殊场景下,is运算符无法精准匹配np.nan。

可行解决方案

方案1:astype(str) + where 快速还原NaN

先将所有元素转字符串,再把原空值位置重新设为np.nan:

import pandas as pd
import numpy as np

df = pd.DataFrame({'column_original': [1, 2, np.nan, 6, 8, np.nan]})
df['column_object'] = df['column_original'].astype(str).where(df['column_original'].notna(), np.nan)

# 验证:空值数量=2,列类型为object
print(df['column_object'].isna().sum())
print(df['column_object'].dtype)

方案2:apply + pd.isna 精准判断空值

用pd.isna()替代x is np.nan,覆盖所有空值类型的判断:

df['column_object'] = df['column_original'].apply(lambda x: np.nan if pd.isna(x) else str(x))

# 验证结果
print(df['column_object'].isna().sum())
print(df['column_object'].dtype)

方案3:处理混合类型列(可选)

如果原列同时包含字符串、数值和空值,先统一转为数值型再处理:

# 非数值内容转为NaN,统一列类型
df['column_original'] = pd.to_numeric(df['column_original'], errors='coerce')
# 再转字符串+保留NaN
df['column_object'] = df['column_original'].apply(lambda x: np.nan if pd.isna(x) else str(x))

内容的提问来源于stack exchange,提问作者Ricardo Tompson Fioravante

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:16:11