使用pandas读取包含许多命名列标签的csv文件

时间:2013-09-19 21:16:53

标签: python pandas multiple-columns labels hierarchical

我是蟒蛇皮的新手。我有一个数据文件,其中包含多个行标签(每行)和列标签(每列),如下列数据,包括3个不同动物(狗,蝙蝠,鸵鸟)的多个录制时间(星期一早上,白天,夜晚) ):

   ''    ,    ''      , colLabel:name    , dog   ,    bat     , Ostrich
   ''    ,    ''      , colLabel:genus   , Canis , Chiroptera , Struthio,
   ''    ,    ''      , colLabel:activity, diurnal,  nocturnal,  diurnal
   day   , time of day,  ''              ,        ,           ,         
  Monday , morning    ,    ''            , 17     ,  5        , 2
  Monday , day        ,    ''            , 63     ,  0        , 34
  Monday , night      ,    ''            , 21     ,  68       , 1
  Friday , day        ,    ''            , 72     ,  0        , 34

我想将这些数据读入Pandas,其中行和列都是按层次结构组织的。这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:9)

您可以使用read_csvheaderindex_coltupleize_cols个参数:

In [1]: df = pd.read_csv('foo.csv', header=[0, 1, 2], index_col=[0, 1], tupleize_cols=False, sep='\s*,\s+')

注意:在0.13 tupelize=False中将是默认设置,因此您无需使用它。

要获得列级名称需要一些黑客攻击:

In [2]: df.columns.names = df.columns[0]

In [3]: del df[df.columns[0]]

In [4]: df
Out[4]:
colLabel:name           dog         bat    Ostrich
colLabel:genus        Canis  Chiroptera  Struthio,
colLabel:activity   diurnal   nocturnal    diurnal
day    time of day
Monday morning           17           5          2
       day               63           0         34
       night             21          68          1
Friday day               72           0         34