Pandas 高级 read_excel 或 ExcelFile.parse

Posted

技术标签:

【中文标题】Pandas 高级 read_excel 或 ExcelFile.parse【英文标题】:Pandas advanced read_excel or ExcelFile.parse 【发布时间】:2015-04-13 21:57:25 【问题描述】:

我正在尝试将 excel 文件有条件地解析为 Pandas 数据帧。我有一组 excel 文件,每个文件的顶部都有一些不属于数据的行 - 一些基于用于创建报告的报告参数的识别数据。

我想将ExcelFile.parse() 方法与skiprows=some_number 一起使用,但我不知道每个文件的 some_number 是多少。

我确实知道HeaderRow 将从可能性列表中的一个成员开始。我如何告诉Pandas 从我的可能性列表中包含任何 some_string 的行开始创建dataframe

或者,有没有办法导入整个工作表,然后在我的可能性列表中删除包含任何 some_string 的行之前的行?

【问题讨论】:

【参考方案1】:

大多数时候我只是在 pandas 中对它进行后处理,即在 pandas 中诊断、删除行并更正 dtypes。这样做的好处是更容易可以说不那么优雅(我怀疑这样做也会更快!):

In [11]: df = pd.DataFrame([['blah', 1, 2], ['some_string', 3, 4], ['foo', 5, 6]])

In [12]: df
Out[12]:
             0  1  2
0         blah  1  2
1  some_string  3  4
2          foo  5  6

In [13]: df[0].isin(['some_string']).argmax()  # assuming it's found
Out[13]: 1

我实际上可能会在 python 中编写此代码,因为它可能对矢量化几乎/没有好处(而且我发现这更具可读性):

def to_skip(df, preceding):
    for s in enumerate(df[0]):
        if s in preceding:
            return i
    raise ValueError("No preceding string found in first column")

In [21]: preceding = ['some_string']

In [22]: to_skip(df, preceding)
Out[22]: 1

In [23]: df.iloc[1:]  # or whatever you need to do
Out[23]:
             0  1  2
1  some_string  3  4
2          foo  5  6

另一种可能性,就是搞乱 ExcelFile 并找到行号(同样使用上面的 for 循环,但在 openpyxl 或类似中)。但是,我不认为如果你这样做,会有一种方法可以只读取一次 excel 文件 (xml)。

与在 csv 上执行此操作相比,这有点不幸,您可以在 csv 中读取前几行(直到您看到所需的行/条目),然后传递此 opened 归档到read_csv。 (如果您可以将 Excel 电子表格导出为 csv,然后在 pandas 中进行解析,那会更快/更干净......)

注意:read_excel 并没有那么快(尤其是与read_csv 相比)...所以 IMO 你想尽快使用 pandas。

【讨论】:

谢谢安迪·海登。我怀疑加载整个文件并使用 Pandas 清理是要走的路。对于 read_csv,那会很好,但是当前预期的输入是 xls 和 xlsx 文档的 zipfile,并且在阅读之前对其进行转换似乎效率很低。你知道 read_excel 是否比 ExcelFile.parse() 方法快吗? @AnthonyRoberts 一个叫另一个,性能没有区别:)

以上是关于Pandas 高级 read_excel 或 ExcelFile.parse的主要内容,如果未能解决你的问题,请参考以下文章

Pandas库read_excel()参数详解

带有超链接的 Pandas read_excel

Python Pandas read_excel dtype str 在读取或通过 to_csv 写入时将 nan 替换为空白 ('')

pandas.read_excel,第一行值

Pandas高级数据分析快速入门之数据筛选——分组排序筛选实践笔记

Python3 pandas 操作列表 简例