我正在尝试读取具有两行标题信息的.csv文件作为多索引,以便稍后我可以访问给定2个标识符的列。该文件看起来像这样(制表符分隔),NA的值是故意这样的:
ind Human Human Human Mouse Mouse Mouse ...
(null) Codon Freq minmax Codon Freq minmax ...
0 ATG 12.5 -5.2 --- NA NA ...
1 AAA 8.9 -25.5 --- NA NA ...
2 GGA 16.5 12.4 ATG 11.9 6.5 ...
我可以使用两行标题读取文件,但这会导致类的对象为pandas.core.frame.DataFrame'而不是' pandas.core.index.MultiIndex':
data = pd.read_csv('alignment.csv', sep="\t", header=[0,1])
当我尝试指定index_col = 0时,正如文档中的一些示例所做的那样,我得到一个" IndexError:list index超出范围"错误,这是几个相关问题的解决方案,但由于某些原因不适合我。
继续前进,我试图以各种方式对数据进行子集化,所有这些方式都失败了。我最接近(我认为)我想要的是做什么
temp = data.ix[:,[("","ind"),("Human","minmax")]]
...至少给了我一个正确尺寸的DataFrame并且标记正确,但是所有的值都被NaN取代了。使用.loc给我一个关于不正确排序的错误,而且我还没有能够让.xs工作。
基本上我正在寻找一种基于物种和参数(例如人类和minmax)对数据集进行子集化的方法。我已经在这里查看了几个相关的问题,但还没有能够解决问题。我怎么能做到这一点?
答案 0 :(得分:0)
嗯......它似乎对我有用......你使用的是什么版本的Pandas / Python?
df= pd.read_clipboard(header = [0,1], index_col=0)
df
Out[389]:
ind Human Mouse ...
(null) Codon Freq minmax Codon Freq minmax ...
0 ATG 12.5 -5.2 --- NaN NaN ...
1 AAA 8.9 -25.5 --- NaN NaN ...
2 GGA 16.5 12.4 ATG 11.9 6.5 ...
df.Human.minmax
df.Human.minmax
Out[390]:
0 -5.2
1 -25.5
2 12.4
Name: minmax, dtype: float64