使用Pandas将两行内容合并至后一行的方法及报错解决
Pandas合并指定行指定列内容到后一行的解决方案
问题场景
原DataFrame:
| A | B | C | D |
|---|---|---|---|
| NaN | NaN | Rossi | Brambilla |
| Federico | Giovanni | Giorgio | Marcello |
期望结果:
| A | B | C | D |
|---|---|---|---|
| NaN | NaN | Rossi | Brambilla |
| Federico | Giovanni | Rossi Giorgio | Brambilla Marcello |
错误原因分析
你之前的代码出现IndexError: single positional indexer is out-of-bounds,核心问题有两个:
- 变量名不匹配:代码里用了
df_bo,但实际你的DataFrame变量应为df,导致引用了不存在的对象或行数不足的数据集 - 错误赋值整行:直接修改
df.iloc[1]会把A、B列也处理成NaN + 字符串,最终还是NaN,不符合需求,应该只针对需要合并的列操作
可行解决方案
方法1:直接定位列赋值
先构造示例DataFrame(已有数据集可跳过):
import pandas as pd import numpy as np df = pd.DataFrame({ 'A': [np.nan, 'Federico'], 'B': [np.nan, 'Giovanni'], 'C': ['Rossi', 'Giorgio'], 'D': ['Brambilla', 'Marcello'] })
针对C、D列拼接第一行和第二行内容:
# 仅修改需要合并的C、D列 df.loc[1, ['C', 'D']] = df.loc[0, ['C', 'D']] + ' ' + df.loc[1, ['C', 'D']]
方法2:使用str.cat更安全拼接字符串
如果要处理的列较多,推荐用str.cat方法,避免空值拼接异常:
merge_cols = ['C', 'D'] df.loc[1, merge_cols] = df.loc[0, merge_cols].str.cat(df.loc[1, merge_cols], sep=' ')
两种方法执行后,都能得到你期望的结果。
内容的提问来源于stack exchange,提问作者Federico Poggio
相关产品推荐
相关产品推荐

