【问题标题】:Pandas csv/multiindex subsettingPandas csv/多索引子集
【发布时间】:2015-06-25 01:37:50
【问题描述】:

我正在尝试读取具有两行标题信息作为多索引的 .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 out of range”错误,这是几个相关问题的解决方案,但由于某种原因不适用于我。

接下来,我尝试以各种方式对数据进行子集化,但都失败了。我得到(我认为)最接近我想要的是通过做
temp = data.ix[:,[("","ind"),("Human","minmax")]]
...这至少给了我一个正确尺寸的 DataFrame 并正确标记,但所有值都已替换为 NaN。使用 .loc 给了我一个关于排序不正确的错误,而且我根本无法让 .xs 工作。

本质上,我正在寻找一种基于物种和参数(例如人类和最小最大值)对数据集进行子集化的方法。我在这里查看了几个相关的问题,但还没有解决问题。我怎样才能做到这一点?

【问题讨论】:

    标签: python csv pandas


    【解决方案1】:

    嗯...它似乎对我有用...您使用的是什么版本的 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
    

    【讨论】:

    • 你说得对,这似乎是我试图读取的数据文件的格式问题(我认为我对此非常小心!)。它仍然没有作为多索引对象被读入,但我至少可以用 index_col = 0 读入它,并像我想要的那样用 .ix 对其进行子集化。谢谢。
    猜你喜欢
    • 2022-07-19
    • 2020-09-05
    • 1970-01-01
    • 2019-07-29
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2021-08-25
    相关资源
    最近更新 更多