如何将Pandas DataFrame列中的整数转换为列表?
解决Pandas列值转单元素列表且保留NaN的问题
我之前处理过类似的需求,给你几个实用的解决方案:
方法一:apply+lambda(直观易读)
这是最直接的实现方式,针对每个元素做判断:非NaN值包裹成单元素列表,NaN值原样保留:
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({'NUMBERS': [1, 2, np.nan, 4, np.nan]}) # 执行列转换 df['NUMBERS'] = df['NUMBERS'].apply(lambda x: [x] if pd.notna(x) else x)
执行后查看结果:
NUMBERS 0 [1] 1 [2] 2 NaN 3 [4] 4 NaN
方法二:np.where(大数据量更高效)
如果你的DataFrame行数很多,apply的逐元素操作可能有点慢,用np.where做向量化操作性能会更好:
df['NUMBERS'] = np.where( pd.notna(df['NUMBERS']), df['NUMBERS'].map(lambda x: [x]), df['NUMBERS'] )
这里用map替代apply,在元素级操作上性能略优,核心逻辑和方法一完全一致。
额外注意事项
如果你的列里存在字符串类型的'NaN'(不是标准的np.nan缺失值),建议先统一转换为标准缺失值,再执行上述操作:
# 将列转为数值型,非数值内容自动转为np.nan df['NUMBERS'] = pd.to_numeric(df['NUMBERS'], errors='coerce')
这样能避免出现把字符串'NaN'转成['NaN']的错误情况。
内容的提问来源于stack exchange,提问作者Blank
相关产品推荐
相关产品推荐

