如何在Pandas DataFrame中合并交替行(一行有数据一行含NaN)
搞定PDF读取后DataFrame的行拆分问题
直接给你能落地的解决方案,针对你说的「一行有完整数据、下一行仅Column A有值其余为NaN」的情况:
步骤1:给行打分组标签
用行号整除2生成分组ID,这样第0、1行自动归为一组,第2、3行归为下一组,以此类推:
df['group_id'] = df.index // 2
步骤2:分组聚合处理
分组后对不同列用对应的聚合逻辑:
Column A:把同组两行的字符串拼接(分隔符可以自己换,比如空格、空串)- 其他列:直接取组内非空的有效数据(因为每组只有一行有值,用
first()/max()都能拿到)
代码示例:
clean_df = df.groupby('group_id').agg( Column_A=('Column A', lambda x: ' '.join(x)), # 把空格换成你需要的分隔符即可 Column_B=('Column B', 'first'), Column_C=('Column C', 'first') ).reset_index(drop=True)
为啥你之前用agg(sum)不行?
sum对字符串是拼接逻辑,但对数值列是求和,问题出在你没给不同列指定对应聚合方式:如果直接全列用sum,遇到非Column A的字符串列会报错;另外就算只有数值列,逻辑上虽然能拿到结果,但不如first()直观——毕竟我们本来就是要取组里唯一的有效数据,不是求和。
示例验证
假设原始DataFrame是这样:
import pandas as pd df = pd.DataFrame({ 'Column A': ['订单编号:202401', '(北京仓)', '客户名称:张三', '(个人用户)'], 'Column B': [150, pd.NA, 200, pd.NA], 'Column C': ['已发货', pd.NA, '待付款', pd.NA] })
处理后得到的clean_df就是:
| Column A | Column B | Column C |
|---|---|---|
| 订单编号:202401 (北京仓) | 150 | 已发货 |
| 客户名称:张三 (个人用户) | 200 | 待付款 |
内容的提问来源于stack exchange,提问作者codelearnerallday
相关产品推荐
相关产品推荐

