使用 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] = ''
我有一个 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] = ''