【问题标题】:Parsing a Multi-Index Excel File in Pandas在 Pandas 中解析多索引 Excel 文件
【发布时间】:2014-07-31 13:44:16
【问题描述】:

我有一个包含三级列 MultiIndex 的时间序列 Excel 文件,如果可能的话,我想成功解析它。有一些关于如何为堆栈溢出索引而不是列执行此操作的结果,并且parse 函数有一个header 似乎没有获取行列表。

ExcelFile 如下所示:

  • A 列是从 A4 开始的所有时间序列日期
  • B 列有 top_level1 (B1) mid_level1 (B2) low_level1 (B3) 数据 (B4-B100+)
  • C 列有 null (C1) null (C2) low_level2 (C3) 数据 (C4-C100+)
  • D 列有空 (D1) mid_level2 (D2) low_level1 (D3) 数据 (D4-D100+)
  • E 列有 null (E1) null (E2) low_level2 (E3) 数据 (E4-E100+)
  • ...

所以有两个low_level 值,很多mid_level 值和一些top_level 值,但诀窍是顶层和中层值是空的,并假定为左边的值。因此,例如上面的所有列都将 top_level1 作为顶部多索引值。

到目前为止,我最好的想法是使用transpose,但它会在任何地方填满Unnamed: #,而且似乎不起作用。在 Pandas 0.13 中,read_csv 似乎有一个 header 参数可以获取列表,但这似乎不适用于 parse

【问题讨论】:

  • 如果有反对意见的选民发表一两条评论会很有用,这样我就知道下次如何用不同的方式表达这个问题了。

标签: python excel parsing pandas time-series


【解决方案1】:

您可以fillna 空值。我没有你的文件,但你可以测试一下

#Headers as rows for now
df = pd.read_excel(xls_file,0, header=None, index_col=0) 

#fill in Null values in "Headers"
df = df.fillna(method='ffill', axis=1) 

#create multiindex column names
df.columns=pd.MultiIndex.from_arrays(df[:3].values, names=['top','mid','low']) 

#Just name of index
df.index.name='Date' 

#remove 3 rows which are already used as column names
df = df[pd.notnull(df.index)] 

【讨论】:

  • 谢谢。 header=None 是我在这里所缺少的,因为这避免了允许水平填充的多个 Unnamed 列名。干得好。
猜你喜欢
  • 2014-01-29
  • 2021-01-20
  • 2020-08-06
  • 2019-07-29
  • 2018-02-26
  • 2020-12-23
  • 1970-01-01
  • 2020-07-19
  • 2019-08-17
相关资源
最近更新 更多