【问题标题】:Read csv file with many named column labels with pandas使用 pandas 读取具有许多命名列标签的 csv 文件
【发布时间】:2013-09-25 03:36:39
【问题描述】:

我是 python 的 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

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

【问题讨论】:

  • 请注意,to_csv 的原生格式与此稍有不同,因为列标签位于第一列中,而您没有额外的列)

标签: python pandas multiple-columns labels hierarchical


【解决方案1】:

您可以使用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

【讨论】:

  • 可能是 tupleize_cols=False 以便生成的索引是实际的 MultiIndex 对象? :)
  • @PhillipCloud 谢谢!刚刚遇到那个问题 :) 少了一个黑客!
  • tupleize_cols=False 是 0.13 中的默认值! (所以你会得到MultiIndex
猜你喜欢
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 2016-12-21
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多