如何在Pandas的同一DataFrame中合并指定列?
解决DataFrame合并多列的问题
看起来你遇到的问题大概率是列名类型不匹配或者数据类型非字符串导致join失败,咱们一步步来搞定:
先排查报错根源
你写的hbadef[['3', '4', '5']]用了字符串形式的列名,但从你给出的DataFrame示例来看,列名是整数0-5,这会导致代码找不到对应列而抛出KeyError;另外如果这几列里存在整数、数值型数据,直接用join也会触发类型错误。
正确的实现方案
假设你的DataFrame列名是整数类型(0、1、2、3、4、5),可以按以下方式操作:
方法1:合并后重构目标DataFrame
# 先把3、4、5列转成字符串,用空格分隔合并(不需要空格就删掉sep参数) hbadef['merged_col'] = hbadef[[3, 4, 5]].astype(str).apply(lambda x: ' '.join(x), axis=1) # 保留前3列+合并后的列,得到你想要的结果 result_df = hbadef[[0, 1, 2, 'merged_col']] # 把合并后的列名改成3,完全匹配你的期望输出 result_df.columns = [0, 1, 2, 3]
方法2:直接替换原列并删除冗余列
如果你想直接修改原DataFrame,替换掉列3并删掉4、5列:
# 合并3、4、5列并赋值给列3 hbadef[3] = hbadef[[3, 4, 5]].astype(str).apply(lambda x: ' '.join(x), axis=1) # 删除多余的4、5列 hbadef.drop(columns=[4, 5], inplace=True)
更高效的写法:用str.cat
如果3、4、5列已经是字符串类型,用str.cat会比apply性能更好:
hbadef['merged_col'] = hbadef[3].str.cat([hbadef[4], hbadef[5]], sep=' ')
常见报错的快速修复
- 若提示
KeyError: '3':把字符串形式的列名['3','4','5']改成整数索引[3,4,5]即可。 - 若提示
TypeError: sequence item 0: expected str instance, int found:给列加上.astype(str)转成字符串类型再合并。
内容的提问来源于stack exchange,提问作者CharlesD
相关产品推荐
相关产品推荐

