如何通过引用已排序的列表最好地在 Python 列表中插入 NaN 值



我有一个包含唯一值的排序列表,该列表是从主 2d 值列表中获得的:

Sorted_List = [1,2,3,4]
Master_List =
[[1],
[1,2],
[1,4],
[3]]

我想使用排序列表并将主列表转换为:

Converted_Master_List :
[[1,NaN,NaN,NaN],
[1,2,NaN,NaN],
[1,NaN,NaN,4],
[NaN,NaN,3,NaN]]

我该如何最好地做到这一点。

最终,我必须将其写入CSV/excel文件中。

我已经编写了代码来从主列表进行排序并将输出写入 CSV 文件,需要在两者之间填写 NaN 值以更好地格式化输出。

你可以试试这个:

import numpy as np
sorted_list = [1, 2, 3, 4]
master_list = [[1], [1, 2], [1, 4], [3]]
# get rows and columns
rows, columns = len(master_list), max(map(max, master_list))
# create an array of rows by columns filled with np.nan
converted_master_list = np.empty((rows, columns))
converted_master_list[:] = np.nan
# set the values of the indices
for i, indices in enumerate(master_list):
for j in indices:
converted_master_list[i, j - 1] = j
print(converted_master_list)

输出

[[ 1. nan nan nan]
[ 1.  2. nan nan]
[ 1. nan nan  4.]
[nan nan  3. nan]]

注意:据我所知,此方法不使用sorted_list,您不需要它。

你可以尝试这样的事情:

Sorted_List = [1,2,3,4]
Master_List =
[[1],
[1,2],
[1,4],
[3]]
Converted_Master_List = []
for part in Master_List:
new_part = [NaN] * len(Sorted_List)
for i in range(len(Sorted_List)):
if Sorted_List[i] in part:
new_part[i] = Sorted_List[i]
Converted_Master_List.append(new_part)

这也将起作用:

Master_List =[[1],[1,2],[1,4],[3]]
Sorted_List = [1,2,3,4]
i = len(Sorted_List)
for my_list in Master_List:
if len(my_list)!= i:
a = i - len(my_list)
my_list.extend(a * ['nan'])

您可以创建一个映射(val -> idx)其中val是排序列表中的值,idx是值索引并使用黑色numpy魔法:

In [62]: sorted_list = [1, 2, 3, 4]
In [63]: master_list = [[1], [1, 2], [1, 4], [3]]
In [64]: inverted_sorted_list = pd.Series(range(len(sorted_list)), index=sorted_list)
In [65]: converted_master_list = np.full((len(master_list), len(sorted_list)), np.nan)
In [66]: for idx, lst in enumerate(master_list):
...:     converted_master_list[idx][inverted_sorted_list[lst]] = lst
...:
In [67]: converted_master_list
Out[67]:
array([[ 1., nan, nan, nan],
[ 1.,  2., nan, nan],
[ 1., nan, nan,  4.],
[nan, nan,  3., nan]])

最新更新