python – 在pandas数据帧中分配新列标签时出现长度不匹配错误

我正在使用的选项卡文件缺少最终的列名.当我尝试通过附加缺失值来修复标头时,出现不匹配错误.这是一个说明问题的例子:

玩具的例子

应该有一个”作为第一个列表的最后一个元素:

missingcol = [[gene, cell_1, '', cell_2]
               [MYC, 5.0, P, 4.0, A]
               [AKT, 3.0, A, 1.0, P]]

为了解决这个问题,我阅读了第一行,在一个带有header = None的跳过第一行的pandas数据框中附加了”,载入了missingcol,并使用修改后的标题重新定义了列名,如下所示:

fullheader = missingcol[0].append('')
fullheader = missingcol[0]

missingcol_dropheader = missingcol[1:]

df = pd.DataFrame(missingcol_dropheader, columns=fullheader)
df

这给了我错误:

AssertionError: 4 columns passed, passed data had 5 columns

最后我检查过,新的fullheader实际上有5个元素来匹配数据框中的五个元素.导致这种持续不匹配的原因是什么?如何解决?

真实的例子

当我重复这些相同的步骤时,我得到一个类似的错误,但是在我的实际测试用例中使用read_csv方法时.我忽略了第0行的标题,以及第1-3行的三个空白行,并删除了不需要的第一列,但是否则它类似:

with open('CCLE_Expression_Entrez_2012-10-18.res', 'r') as f:
    header = f.readline().strip().split('\t')
header.append('') # missing empty colname over last A/P col

rnadf = pd.read_csv('CCLE_Expression_Entrez_2012-10-18.res', delimiter='\t', index_col=0, header=None, skiprows=[0,1,2,3])  
rnadf.columns = header
rnadf.drop([], axis=1, inplace=True)
rnadf.columns = header

ValueError: Length mismatch: Expected axis has 2073 elements, new values have 2074 elements

与测试用例非常相似的错误.是什么让这个错误与测试用例不同,我该如何解决?

最佳答案 问题是参数index_col = 0在基因名称开始列索引:

《python – 在pandas数据帧中分配新列标签时出现长度不匹配错误》

上面的数据帧在2073结束,其中带有上述参数的基于1的索引是2073个元素:比我修复的标题少一个元素.这会产生以下错误:

ValueError:长度不匹配:预期的轴有2073个元素,新值有2074个元素

虽然使用index_col = None的相同read_csv命令分配了一个单独的数字索引,但将(在本例中为基因名称)从仅仅标签放回到数据框中:

《python – 在pandas数据帧中分配新列标签时出现长度不匹配错误》

上面的数据帧以列号2073结束,这是2074个元素,带有从零开始的索引:与我修复的标题长度相同!问题解决了:

《python – 在pandas数据帧中分配新列标签时出现长度不匹配错误》

点赞