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

时间:2018-10-11 11:58:27

标签: python numpy python-3.6

我有一个包含唯一值的排序列表,该列表是从主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值以更好地格式化输出。

4 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

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)

答案 1 :(得分:0)

您可以尝试以下方法:

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

答案 2 :(得分:0)

这也将起作用:

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'])

答案 3 :(得分:0)

您可以创建一个映射(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]])