Pandas ------ 如果读取带有 multi-index 和 Multi-column 表头的数据

pandas ------ 如果读取带有 multi-index 和 Multi-column 表头的数据

  • 引言
  • 正文

引言

之前我们在 《Pandas ------ 向 Excel 文件中写入含有 multi-index 和 Multi-column 表头的数据》 一文中介绍了如何向 Excel 文件中写入含有 multi-indexMulti-column 表头的数据。但是我们也知道由于 pandas 存在一个 bug,导致列向表头与数据之间存在一行的间隔,那么如果我们要读取我们写入的数据,且希望它能够被正常显示该怎么办呢?

正文

如果使用的数据形式如下:
在这里插入图片描述
我们可以使用如下代码获取 layer1 对应的列数据:

import numpy as np
import pandas as pd

data = pd.read_excel('output.xlsx')
print(np.array(data['layer1'][2:]))
"""
result:
['a' 'c']
"""

可以看到,通过使用上述方法,我们成功获取到了我们想要的结果。np.array(data['layer1'][2:] 中的索引值为什么是 2:,这是因为我们有两行列向表头,且因为 bug 中间间隔了一行,因此,索引值 0 对应 col1 行,1 对应空行,而 2 对应数据行。

关于为什么使用 np.array() 函数,可以参考 Pandas ------ 通过 np.array 函数去掉数据中的 index。

那如果我们想要处理的数据还有合并表头呢?
Pandas ------ 如果读取带有 multi-index 和 Multi-column 表头的数据_第1张图片
首先我们打印一下数据进行查看:

import pandas as pd


data = pd.read_excel('output.xlsx')
print(data)
"""
result:
  Unnamed: 0 layer1 Unnamed: 2
0        NaN  col 1      col 2
1        NaN    NaN        NaN
2      row 1      a          b
3      row 2      c          d
"""

可以看到,此时合并行的表头非常奇怪,只有一列是 layer1, 而另一个列是 Unamed: 2。为了处理这个问题,我们需要在读入的时候指定第二行 col1col2 作为 column 表头。然后再读取我们想要的数据。

import numpy as np
import pandas as pd


data = pd.read_excel('output.xlsx', names=['col 1', 'col 2'])
print(np.array(data['col 1'][2:]))
"""
result:
['a' 'c']
"""

可以看到通过上面的操作,我们也得到了想要的结果。

如果大家觉得有用,就请点个赞吧~

你可能感兴趣的:(pandas,pandas)