我正在使用的标签文件缺少最后的列名。当我尝试通过附加缺少的值来修复标头时,出现不匹配错误。这是说明问题的示例:
玩具实例
应该有一个''作为第一个列表的最后一个元素:
missingcol = [[gene, cell_1, '', cell_2]
[MYC, 5.0, P, 4.0, A]
[AKT, 3.0, A, 1.0, P]]
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我阅读了第一行,在的后面添加了'',并通过跳过第一行将其加载missingcol到pandas数据框中,header=None并使用修改后的标题重新定义了列名,如下所示:
fullheader = missingcol[0].append('')
fullheader = missingcol[0]
missingcol_dropheader = missingcol[1:]
df = pd.DataFrame(missingcol_dropheader, columns=fullheader)
df
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
AssertionError: 4 columns passed, passed data had 5 columns
Run Code Online (Sandbox Code Playgroud)
最后我检查了一下,新的fullheader实际上有5个元素来匹配数据框中的5个元素。 是什么导致这种持续的不匹配,我该如何解决?
真实的例子
当我重复这些相同的步骤时,但是在read_csv我的实际测试用例中使用method 时,也会收到类似的错误。我忽略了行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
Run Code Online (Sandbox Code Playgroud)
与测试案例非常相似的错误。 是什么使此错误与测试用例不同,如何解决?
Tho*_*hew 12
问题在于参数index_col=0是在基因名称处开始列索引:
上面的数据帧以 2073 结束,使用上述参数进行基于 1 的索引,是 2073 个元素:比我修复的标题少一个元素。这产生了以下错误:
ValueError: Length mismatch: Expected axis has 2073 elements, new values have 2074 elements
虽然分配了单独的数字索引的相同read_csv命令index_col=None,将(在这种情况下基因名称)从只是标签放回数据帧:
上面的数据帧在列号 2073 处结束,这是 2074 个元素,从零开始索引:与我修复的标题长度相同!问题解决了: