Pandas中使用apply拆分Series字符时如何跳过NaN值?
解决办法
1. 改造apply的lambda函数兼容NaN
你只需要在lambda里加个判断,遇到NaN时直接返回三个缺失值的Series,就能避免list(x)的报错:
import pandas as pd # 假设你的原Series变量名为score_series split_df = score_series.apply( lambda x: pd.Series(list(x)) if pd.notna(x) else pd.Series([pd.NA, pd.NA, pd.NA]) ) # 给列重命名成目标格式 split_df.columns = ['score_0', 'score_1', 'score_2']
2. 更高效的字符串拆分法(推荐给94万行的大数据)
apply处理百万级数据时效率偏低,用pandas内置的字符串方法会快很多,还能自动兼容NaN:
# 拆分字符并展开成列,拆分后首尾会有空字符串,所以取中间3列(索引1到3) split_df = score_series.str.split('', expand=True).iloc[:, 1:4] # 重命名列 split_df.columns = ['score_0', 'score_1', 'score_2'] # 把拆分产生的空字符串转为NaN split_df = split_df.replace('', pd.NA)
两种方法都能得到你需要的结果,原Series中的NaN行会生成全NaN的对应列。
内容的提问来源于stack exchange,提问作者Gooby
相关产品推荐
相关产品推荐

