当某些列表包含 Null 值时,如何展平列表列?
Posted
技术标签:
【中文标题】当某些列表包含 Null 值时,如何展平列表列?【英文标题】:How to flatten column of lists when some contain Null values? 【发布时间】:2021-12-03 04:30:07 【问题描述】:这可能是一个非常明显的问题,但我有一列包含我想要展平的列表:即[AB, CD] -> AB, CD
。
示例数据框:
data = [
["ABC", ["AB", "AB", "EF"]],
["DEF", ["CD", "EF"]],
["GHI", ["JK"]],
[
"JKL",
np.nan,
],
]
df = pd.DataFrame(data, columns=["ID", "list"])
df
我正在将这个函数应用于所述列:
def func(string):
flattened_string = ", ".join(map(str, string))
return flattened_string
df = df["list_column"].apply(func)
但是,有几行包含 NaN
值会引发错误 "TypeError: 'float' object is not iterable"
。有什么办法可以修改这个功能来解决这个问题吗?或者也许(可能)有更好的方法来做到这一点?
谢谢!!!
【问题讨论】:
【参考方案1】:您需要将该列中的NaN
s 填充为空但可迭代的内容,例如""
或[]
。您还可以将函数简化为 .apply(", ".join)
,假设您要加入的列表列只是字符串。
df["list"] = df["list"].fillna("").apply(", ".join)
【讨论】:
一个字。聪明+1 哇,我真的过于复杂了。谢谢!!! 终于在你的雷达下偷偷给 Pandas 答案 Corralien :D【参考方案2】:如果需要保留列中的NaN
值,我们可以使用setting with enlargement,只需加入列中的notna
值并赋值:
df['list'] = df.loc[df['list'].notnull(), 'list'].map(','.join)
或者如果列表中有非字符串:
df['list'] = df.loc[
df['list'].notnull(), 'list'
].map(lambda x: ','.join(map(str, x)))
df
:
ID list
0 ABC AB,AB,EF
1 DEF CD,EF
2 GHI JK
3 JKL NaN # Still NaN not empty string
【讨论】:
以上是关于当某些列表包含 Null 值时,如何展平列表列?的主要内容,如果未能解决你的问题,请参考以下文章
如何在保留列表名称和值的同时展平一列列表? [r] [重复]
Python:如何展平每个子列表是一个包含单个浮点数的列表列表[关闭]