【问题标题】:Python, Pandas concat ladderPython、Pandas 连接梯
【发布时间】:2021-10-01 16:32:27
【问题描述】:

我正在使用 tabula 包为我的工作文档编写一个 pdf 到 xlsx 的转换器。

我需要从 PDF 的所有页面中提取表格并将它们插入到 xlsx 文件中。

我将 read_pdf 与“所有”页面一起使用,并获得 1 个带有列名的页表:

所有其他页面都有 1,2,3,4 列名:

所以我的问题是,当我尝试连接所有页面时,它们会从第二页变成楼梯,如下所示:

那么我该如何解决这个问题,这样每个页面都会一个接一个地连接,而不会向右移动?

【问题讨论】:

    标签: pandas concatenation tabula


    【解决方案1】:

    如果两个数据框具有相同的列名,则连接将按您的预期工作。所以第一个想法是将第二个数据框重命名为df2.columns = df1.columns。然后串联应该起作用。这里的问题是第二个数据框的列对我来说看起来像是有效数据,这会丢失。

    这是保存这一行的技巧。

    df2.loc[-1] = df2.columns
    df2 = df2.sort_index().reset_index(drop=True)
    df2.columns = df1.columns
    pd.concat([df1, df2], ignore_index=True)
    

    应该这样做。

    示例

    这是一个小例子。我认为这符合您的问题。

    df1 = pd.DataFrame({'a':[1,2,3,4], 'b':[1,2,3,4]})
    >>> df1
       a  b
    0  1  1
    1  2  2
    2  3  3
    3  4  4
    df2 = pd.DataFrame({'1':[1,2,3,4], '2':[1,2,3,4]})
    >>> df1
       1  2 # << valid data here
    0  1  1
    1  2  2
    2  3  3
    3  4  4
    df2.loc[-1] = df2.columns
    df2 = df2.sort_index().reset_index(drop=True)
    df2.columns = df1.columns
    df = pd.concat([df1, df2], ignore_index=True)
    >>> df
       a  b
    0  1  1
    1  2  2
    2  3  3
    3  4  4
    4  1  2 # this data was saved
    5  1  1
    6  2  2
    7  3  3
    8  4  4
    

    编辑

    如果你有一个DataFrames列表,因为有多个页面,你可以循环遍历这个列表:

    # df_list = [df1, ... dfn]
    for i, item in enumerate(df_list[1:], start=1):
        df_temp = item
        df_temp.loc[-1] = df_temp.columns
        df_temp = df_temp.sort_index().reset_index(drop=True)
        df_temp.columns = df_list[0].columns
        df_list[i] = df_temp
    
    final_df = pd.concat(df_list, ignore_index=True)
    

    【讨论】:

    • 如果我不仅有 2 个数据帧,而且可能超过 50 个,这是否可行,因为每个帧都是一个 PDF 页面...
    • 当我尝试执行 df2.loc[-1] 我得到 KeyError: -1,因为每个索引都是一行
    • df2.loc[-1] 引发错误,因为索引 -1 不存在。您的索引从 0 开始。
    猜你喜欢
    • 2018-05-23
    • 2019-05-19
    • 2018-04-20
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2018-06-14
    相关资源
    最近更新 更多