【发布时间】:2017-06-27 05:23:09
【问题描述】:
我想用 Python Pandas 读取一个如下所示的 Excel 文件:
https://www.dropbox.com/s/1usfr3fxfy2qlpp/header_with_merged_cells.xlsx?dl=0
我们可以看到这个 Excel 文件有一个合并单元格的标题
我做到了
import pandas as pd
df = pd.read_excel("header_with_merged_cells.xlsx", skiprows=3)
print(df)
print(df.dtypes)
print(df.columns)
它返回一个像这样的DataFrame:
ColA ColB ColC Unnamed: 3 Unnamed: 4 ColD
0 NaT NaN 1 2.0 3 NaN
1 2010-01-01 A A 2.1 2010-02-01 00:00:00 E
2 2010-01-02 B C 2.2 2010-02-02 00:00:00 F
dtypes点赞:
ColA datetime64[ns]
ColB object
ColC object
Unnamed: 3 float64
Unnamed: 4 object
ColD object
columns点赞:
Index(['ColA', 'ColB', 'ColC', 'Unnamed: 3', 'Unnamed: 4', 'ColD'], dtype='object')
有没有办法修复列以获取 ColA, ColB, ColC.1, ColC.2, ColC.3, ColD 或 MultiIndex 列?
一个问题是 D5 单元格被视为float(而不是int 或str)
另一个问题是 E 列应该被视为datetime64[ns]
header`read_excel 的参数可以帮忙:
df = pd.read_excel("header_with_merged_cells.xlsx", skiprows=3, header=[0,1])
但是我们得到一个像这样的DataFrame:
ColA ColB ColC ColD
Unnamed: 0_level_1 1 2 3 Unnamed: 4_level_1
2010-01-01 A A 2.1 2010-02-01 E
2010-01-02 B C 2.2 2010-02-02 F
dtypes点赞:
ColA
ColB Unnamed: 0_level_1 object
ColC 1 object
2 float64
3 datetime64[ns]
ColD Unnamed: 4_level_1 object
dtype: object
columns 喜欢:
MultiIndex(levels=[['ColB', 'ColC', 'ColD'], [1, 2, 3, 'Unnamed: 0_level_1', 'Unnamed: 4_level_1']],
labels=[[0, 1, 1, 1, 2], [3, 0, 1, 2, 4]],
names=['ColA', None])
看到Unnamed: 0_level_1、Unnamed: 4_level_1 之类的列很奇怪。
没有办法解决吗?
【问题讨论】:
-
快速解决方案是
df = pd.read_excel("header_with_merged_cells.xlsx", skiprows=3, header=[0,1]) -
谢谢 我不知道标题可能是行索引列表。但仍有一些清理工作要做。
ColA ColB ColC ColD Unnamed: 0_level_1 1 2 3 Unnamed: 4_level_1 2010-01-01 A A 2.1 2010-02-01 E 2010-01-02 B C 2.2 2010-02-02 F