如何合并Pandas DataFrame中同名的userLabel列至单列?
解决Pandas中同名列合并问题
你之前的代码无效是因为:当DataFrame存在同名列时,直接通过ABC['userLabel']只会访问第一个匹配的列,你的fillna操作等于用列自身填充空值,完全没用到第二个userLabel列。
下面是两种可行的实现方法:
方法一:筛选+行填充(通用型)
无需依赖列的固定位置,适合任意数量同名列的场景:
import pandas as pd import numpy as np data = {'userLabel': ['a', '', 3, '', 'b'], 'name':['abc', 'def', 'ghi', '', 'ijk'], 'userLabel1': ['', '2', '', '4', '']} ABC = pd.DataFrame(data).rename(columns={'userLabel1':'userLabel'}) # 筛选所有名为userLabel的列,先把空字符串转为NaN,再按行用非空值填充 ABC['userLabel'] = ABC.filter(like='userLabel').replace('', np.nan).bfill(axis=1).iloc[:, 0] # 移除重复的userLabel列 ABC = ABC.loc[:, ~ABC.columns.duplicated()] print(ABC)
方法二:指定列位置合并(精准型)
如果你明确知道两个userLabel列的位置,可以直接定位操作:
import pandas as pd import numpy as np data = {'userLabel': ['a', '', 3, '', 'b'], 'name':['abc', 'def', 'ghi', '', 'ijk'], 'userLabel1': ['', '2', '', '4', '']} ABC = pd.DataFrame(data).rename(columns={'userLabel1':'userLabel'}) # 分别取出两个userLabel列,将空字符串转为NaN col1 = ABC.iloc[:, 0].replace('', np.nan) col2 = ABC.iloc[:, 2].replace('', np.nan) # 合并:优先取第一列的值,第一列空时用第二列的值 ABC['userLabel'] = col1.combine_first(col2) # 删除多余的userLabel列 ABC = ABC.drop(ABC.columns[2], axis=1) print(ABC)
两种方法最终都会得到你预期的结果:
userLabel name 0 a abc 1 2 def 2 3 ghi 3 4 4 b ijk
内容的提问来源于stack exchange,提问作者Sakeer
相关产品推荐
相关产品推荐

