Pandas csv / multiindex subsetting

时间:2015-06-25 01:37:51

标签: python csv pandas

我正在尝试读取具有两行标题信息的.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)对数据集进行子集化的方法。我已经在这里查看了几个相关的问题,但还没有能够解决问题。我怎么能做到这一点?

1 个答案:

答案 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