扁平化列表列表,用特定值替换空子列表
Posted
技术标签:
【中文标题】扁平化列表列表,用特定值替换空子列表【英文标题】:Flattening a list of lists, replacing empty sublists with a certain value 【发布时间】:2020-03-31 13:57:45 【问题描述】:我有一个列表列表,其中包含空子列表和非空子列表的混合。 列表总长度为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',...]
我应该尝试什么?
【问题讨论】:
【参考方案1】:您可以执行以下操作:
>>> [name for sublist in _remain for name in (sublist or [np.nan])]
['24', '17', nan, '17', nan, '17']
【讨论】:
【参考方案2】:由于 pandas 被标记(尽管可以按照上述答案的建议使用 vanilla python 来完成),一种方法是:
pd.DataFrame(l).fillna(np.nan).squeeze().tolist()
['24', '17', nan, '17', nan, '17']
【讨论】:
【参考方案3】:这是一种选择:
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']
【讨论】:
【参考方案4】:你可以使用一个小的辅助函数:
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]
【讨论】:
【参考方案5】:你可以用这个:
flat_list = [item for sublist in l for item in sublist]
或
flat_list = []
for sublist in l:
if len(sublist) == 0:
flat_list.append(np.nan)
else:
for item in sublist:
flat_list.append(item)
【讨论】:
它放了两个版本,一个处理nan,另一个不处理以上是关于扁平化列表列表,用特定值替换空子列表的主要内容,如果未能解决你的问题,请参考以下文章
2021-11-08:扁平化嵌套列表迭代器。给你一个嵌套的整数列表 nestedList 。每个元素要么是一个整数,要么是一个列表;该列表的元素也可能是整数或者是其他列表。请你实现一个迭代器将其扁平化
使用 pandas json_normalize 扁平化包含多个嵌套列表的字典列表
扁平化(不规则)Python 中关于 Pandas Dataframes 的列表列表