在pandas dataframe

时间:2016-04-13 19:48:19

标签: python pandas

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

玩具示例

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

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

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

1 个答案:

答案 0 :(得分:2)

问题是参数["dry","dry","wet","very wet"]开始对基因名称进行列索引:

enter image description here

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

index_col=0

虽然ValueError: Length mismatch: Expected axis has 2073 elements, new values have 2074 elements命令与read_csv分配了一个单独的数字索引,但将(在本例中为基因名称)从仅仅标签中放回到数据框中:

enter image description here

上面的数据帧在第2073列结束,这是2074个元素,基于零的索引:与我修复的标题相同的长度!问题解决了:

enter image description here