使用 3D 列表填充 Excel 文件 - Python

Populating Excel file with a 3D list - Python

我有一个 3D 列表,其中每个 sub-list 的条目并不总是一个列表:

example_list = [
    [123, 'name surname 1', 'job title 1', ['Entry 1', 'Exit 1'], [123, 123], 'Reason for flag'],
    [456, 'name surname 2', 'job title 2', ['Entry 2', 'Exit 2'], [456, 456], 'Reason for flag']
]

我正在尝试使用以下方法将其放入 excel 电子表格中:

import pandas as pd

example_list = [
    [123, 'name surname 1', 'job title 1', ['Entry 1', 'Exit 1'], [123, 123], 'Reason for flag'],
    [456, 'name surname 2', 'job title 2', ['Entry 2', 'Exit 2'], [456, 456], 'Reason for flag']
]

filename = 'test'

def write_to_spreadsheet(iterable, document_name):

    df = pd.DataFrame(iterable)
    df.to_excel(excel_writer = f'{document_name}.xlsx')

write_to_spreadsheet(iterable=example_list, document_name=filename)

这给了我一个如下所示的电子表格:

但是,我想要一个如下所示的输出:

本质上是扩展内部列表(长度可以变化,因此它们不一定会占用一定数量的行)。

我看到了一些答案,但每个答案都处理了多维列表,其中每个条目都是 list 类型。

附加信息:

我没有使用字典的原因是在我的项目的其余部分使用列表更容易,并且键(例如 'name surname')可能会重复。出于这个原因,我没有尝试过 pandas.DataFrame.explode() 方法(据我所知,键用作列标题)。

尝试:

df = pd.DataFrame(example_list)
x = df.set_index([0,1,2,5]).apply(pd.Series.explode).reset_index()
g = lambda col: x[col].duplicated()
x.loc[g(0) & g(1) & g(2) & g(5), [0,1,2,5]] = ''

x:

0 1 2 5 3 4
0 123 name surname 1 job title 1 Reason for flag Entry 1 123
1 Exit 1 123
2 456 name surname 2 job title 2 Reason for flag Entry 2 456
3 Exit 2 456

一般解决方案:

df = pd.DataFrame(example_list)
mask = df.iloc[0].apply(lambda x: isinstance(x, list))
df = df.apply(pd.Series.explode)
df.loc[df.index.duplicated(), ~mask] = ''