我正在使用的标签文件缺少最终的列名。当我尝试通过附加缺失值来修复标头时,出现不匹配错误。这是一个说明问题的例子:
玩具示例
应该有一个''作为第一个列表的最后一个元素:
missingcol = [[gene, cell_1, '', cell_2]
[MYC, 5.0, P, 4.0, A]
[AKT, 3.0, A, 1.0, P]]
为了解决这个问题,我阅读了第一行,附加了一个''
,将missingcol
加载到带有header=None
的pandas数据框中并跳过了第一行,并重新定义了列名。修改过的标题,如下所示:
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
与测试用例非常相似的错误。 是什么让这个错误与测试用例不同,我该如何解决?
答案 0 :(得分:2)
问题是参数["dry","dry","wet","very wet"]
开始对基因名称进行列索引:
以上数据帧于2073年结束,其中基于1的索引使用上述参数,是2073个元素:比我修复的标题少一个元素。这会产生以下错误:
index_col=0
虽然ValueError: Length mismatch: Expected axis has 2073 elements, new values have 2074 elements
命令与read_csv
分配了一个单独的数字索引,但将(在本例中为基因名称)从仅仅标签中放回到数据框中:
上面的数据帧在第2073列结束,这是2074个元素,基于零的索引:与我修复的标题相同的长度!问题解决了: