展平列表列表,将空子列表替换为特定值

时间:2019-12-06 14:52:46

标签: python pandas list list-comprehension

我有一个列表列表,其中包含空子列表和非空子列表。 列表的总长度为240。

_remain = [['24'],
 ['24'],
 ['17'],
 [],
 ['17'],
 [],
 ['17'],...]

我尝试使用以下方法将列表的列表展平为一个列表:

[name for sublist in _remain for name in sublist]

但是当我这样做时,我得到一个长度为220的列表。空的子列表不见了。

我希望得到一个扁平化的列表,用np.nan替换空列表,以便将其插入到熊猫DataFrame中。

我想要得到的结果列表:

['24',
 '24',
 'np.nan',
 '17',
 'np.nan',
 '17',...]

我应该尝试什么?

5 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

>>> [name for sublist in _remain for name in (sublist or [np.nan])]
['24', '17', nan, '17', nan, '17']

答案 1 :(得分:2)

由于已标记了熊猫(尽管可以按照上面的答案建议使用香草python完成),所以一种方法是:

c:\Python38\python.exe setup.py install

pd.DataFrame(l).fillna(np.nan).squeeze().tolist()

答案 2 :(得分:2)

这里是一种选择:

L = [
    ['24'],
    ['17'],
    [],
    ['17'],
    [],
    ['17']
]
L = np.array([l[0] if l else np.nan for l in L])

输出:

L >> ['24' '17' 'nan' '17' 'nan' '17']

答案 3 :(得分:2)

您可以使用一个小的助手功能:

lst = [[1], [], [2], [], [3]]

def func(x):
    try:
        return x[0]
    except IndexError:
        return None

[func(i) for i in lst]
# [1, None, 2, None, 3]

答案 4 :(得分:1)

您可以使用:

$$2^2^x$$

 flat_list = [item for sublist in l for item in sublist]