当某些列表包含 Null 值时如何展平列表列?
How to flatten column of lists when some contain Null values?
这可能是一个非常明显的问题,但我有一列包含我试图展平的列表:即 [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"
。有什么办法可以修改这个函数来解决这个问题吗?或者也许(可能)有更好的方法来做到这一点?
谢谢!!!
您需要将该列中的 NaN
填充为空但可迭代的内容,例如 ""
或 []
。您还可以将函数简化为 .apply(", ".join)
,假设您要加入的列表列只是字符串。
df["list"] = df["list"].fillna("").apply(", ".join)
如果需要保留列中的 NaN
值,我们可以使用列中的 setting with enlargement by only joining the 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
这可能是一个非常明显的问题,但我有一列包含我试图展平的列表:即 [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"
。有什么办法可以修改这个函数来解决这个问题吗?或者也许(可能)有更好的方法来做到这一点?
谢谢!!!
您需要将该列中的 NaN
填充为空但可迭代的内容,例如 ""
或 []
。您还可以将函数简化为 .apply(", ".join)
,假设您要加入的列表列只是字符串。
df["list"] = df["list"].fillna("").apply(", ".join)
如果需要保留列中的 NaN
值,我们可以使用列中的 setting with enlargement by only joining the 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