python 当Pandas表格中有列跨度或行跨度时,是否有合并单元格的方法

mrfwxfqh  于 2023-01-16  发布在  Python
关注(0)|答案(1)|浏览(163)

我最近开发了一个API,它把用户表当作html,并试图用panda把它转换成excel。但我面临的问题是,我想合并任何基于td的单元格,它有列跨度或行跨度,但panda似乎不知道。相反,它把当前的td值复制到另一个单元格,而不是合并它。有什么方法可以实现这一点吗?

这是我写的代码

import pandas as pd
import openpyxl
import lxml

df = pd.read_html("""
    <table>
   <thead>
     <tr>
       <th>Name</th>
       <th>Age</th>

     </tr>
   </thead>
   <tbody>
     <tr>
       <td colspan=2>Test</td>
     </tr>
     <tr>
       <td>Test</td>
       <td>20</td>
     </tr>
   </tbody>
  </table>
""")[0]

df.to_excel('test.xlsx')

这就是结果

预期结果

sgtfey8w

sgtfey8w1#

在我看来,继续的方法是使用多索引,如下面的脚本所示。

    • 使用 Dataframe 合并**
  • 您的 Dataframe :
import pandas as pd

df = pd.read_html("""
    <table>
   <thead>
     <tr>
       <th>Name</th>
       <th>Age</th>

     </tr>
   </thead>
   <tbody>
     <tr>
       <td colspan=2>Test</td>
     </tr>
     <tr>
       <td>Test</td>
       <td>20</td>
     </tr>
   </tbody>
  </table>
""")[0]

# >>> df
#    Name   Age
# 0  Test  Test
# 1  Test    20
  • 建议脚本:
# Create MultiIndex DataFrame
df.columns = pd.MultiIndex.from_tuples(zip(list(df.iloc[0]), df.columns), names=["first", "second"])
df = df.drop(axis=0, index=0).reset_index(level=0, drop=True)
df.to_excel('text.xlsx', merge_cells=True)
  • Python解释器中的 Dataframe 可视化:
first   Test    
second  Name Age
0       Test  20
  • XL中的 Dataframe 可视化:

    • 其他示例**
import pandas as pd
import numpy as np

arrays = [["bar", "bar", "baz", "baz", "foo", "foo", "qux", "qux"],
          ["one", "two", "one", "two", "one", "two", "one", "two"]]
 
tuples = list(zip(*arrays))
# [('bar', 'one'), ('bar', 'two'), ('baz', 'one'), ('baz', 'two'), 
# ('foo', 'one'), ('foo', 'two'), ('qux', 'one'), ('qux', 'two')]

index = pd.MultiIndex.from_tuples(tuples, names=["first", "second"])

s = pd.Series(np.random.randn(8), index=index)
# first  second
# bar    one       0.469112
#        two      -0.282863
# baz    one      -1.509059
#        two      -1.135632
# foo    one       1.212112
#        two      -0.173215
# qux    one       0.119209
#        two      -1.044236
# dtype: float64

s.to_excel('text.xlsx', merge_cells=True)
    • XL中的输出**

    • 说明**

注意,您需要激活属性merge_cells来合并多个索引。
或者您可以选择在发送 Dataframe 到excel后合并。更多信息请参见:Merging Specific Cells in an Excel Sheet with Python

相关问题