Python处理DataFrame含空值的合并列按空格拆分问题
PDF提取表格合并列拆分的空值错位解决方法
问题场景
从PDF提取表格时,原本的A、B、C三列被合并为一列,DataFrame中该合并列的数据如下:
import pandas as pd df = pd.DataFrame({ 'A B C': ['A B C', '1 2 3', '6 3 5', '4 6', '3 5 3'] }) merged_col = 'A B C'
使用以下代码拆分时,多数情况正常,但遇到仅含两个值的行(如第三行'4 6')会出现错位:
s = merged_col.split(' ')[0] t = merged_col.split(' ')[1] u = merged_col.split(' ')[2] df[s],df[t],df[u] = df[merged_col].str.rsplit(n=2, expand=True)
当前错误输出:
A,B,C A,B,C 1,2,3 6,3,5 4,6, 3,5,3
期望正确输出(缺失值对应A列):
A,B,C A,B,C 1,2,3 6,3,5 ,4,6 3,5,3
解决方案
核心思路是:拆分每行后,对元素不足3个的行在左侧补空值,确保每行都对应A、B、C三列的位置,避免错位。
实现代码:
import pandas as pd import numpy as np # 拆分每行得到列表 split_rows = df[merged_col].str.split(' ', expand=False) # 补全列表长度至3,左侧补NaN filled_rows = split_rows.apply(lambda x: [np.nan]*(3 - len(x)) + x if len(x) < 3 else x) # 转换为DataFrame并赋值给对应列 split_df = pd.DataFrame(filled_rows.tolist(), columns=[s, t, u]) df[s], df[t], df[u] = split_df[s], split_df[t], split_df[u]
执行后即可得到符合预期的拆分结果,空值会自动对应到缺失的A列位置。
内容的提问来源于stack exchange,提问作者SKY
相关产品推荐
相关产品推荐

