存在重复列名时拆分Pandas DataFrame的方法咨询
解决重复列名DataFrame拆分问题
嘿,这个重复列名的拆分问题我碰到过,给你几个实用的解决办法,都能避开你说的那些坑:
方案1:按列位置索引拆分(最直接)
既然列名重复,但每列的位置是唯一的,直接用iloc按位置取列就完全不会受重复列名的影响,之后再用copy()也没问题:
# 拆分前4列和后4列 df1 = dataframe_1.iloc[:, :4].copy() df2 = dataframe_1.iloc[:, 4:].copy() # 可选:给新DataFrame重命名列,避免后续操作混淆 df1.columns = ['A_first', 'A_second', 'A_third', 'A_fourth'] df2.columns = ['B_first', 'B_second', 'B_third', 'B_fourth']
解释:iloc[:, :4]直接取前4列,iloc[:, 4:]取第5到第8列,完全不依赖列名,自然不会有重复列名导致的问题。重命名列是为了后续操作更清晰,避免再次遇到重复列名的麻烦。
方案2:创建DataFrame时直接指定不重复列名
从根源上解决重复列名的问题,在把二维数组转成DataFrame的时候,就给第二组列名加上区分标识:
import pandas as pd # 定义带区分的列名,替换原来的重复列名 custom_columns = [ 'A_first', 'A_second', 'A_third', 'A_fourth', 'B_first', 'B_second', 'B_third', 'B_fourth' ] # 转换为DataFrame时直接指定列名 dataframe_1 = pd.DataFrame(arrayFull, columns=custom_columns) # 现在拆分就简单了,直接按列名选取 df1 = dataframe_1[['A_first', 'A_second', 'A_third', 'A_fourth']].copy() df2 = dataframe_1[['B_first', 'B_second', 'B_third', 'B_fourth']].copy()
解释:这样创建出来的DataFrame本身就没有重复列名,后续的拆分和copy()操作都能正常进行,完全避开了重复列名的问题。
方案3:基于列名列表切片拆分(保留原列名)
如果你一定要保留原来的重复列名,也可以通过列名列表的切片来选取:
# 获取所有列名的列表 all_columns = dataframe_1.columns # 取前4个列名(即使重复) df1 = dataframe_1[all_columns[:4]].copy() # 取后4个列名 df2 = dataframe_1[all_columns[4:]].copy()
解释:all_columns[:4]是前4个列名的列表(虽然有重复),用这个列表去索引DataFrame,会精确选取对应位置的列,而不是所有同名列,所以copy()也能正常工作。
内容的提问来源于stack exchange,提问作者Nimitz
相关产品推荐
相关产品推荐

