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

ejm*_*oli 5 python labels hierarchical multiple-columns pandas

我是蟒蛇熊猫的新手.我有一个数据文件,其中包含多个行标签(每行)和列标签(每列),如下列数据,包括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
Run Code Online (Sandbox Code Playgroud)

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

And*_*den 9

您可以使用header,index_col以及tupleize_cols的参数read_csv:

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

注意:在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
Run Code Online (Sandbox Code Playgroud)

  • ``tupleize_cols = False``现在是0.13的默认值!(所以你会得到``MultiIndex``列 (2认同)