gpt4 book ai didi

python - Pandas:将一行中的 nan 转换为空数组

转载 作者:太空宇宙 更新时间:2023-11-03 21:30:46 25 4
gpt4 key购买 nike

我的数据框如下所示

df1

id   c1
1 abc
2 def
3 ghi

df2

id   set1
1 [123,456]
2 [789]

当我加入 df1 和 df2 时(final_data = df1.merge(df2, how = 'left'))。它给了我

最终_df

id   c1   set1
1 abc [123,456]
2 def [789]
3 ghi NaN

我使用下面的代码将 NaN 替换为空数组 []

for row in final_df.loc[final_df.set1.isnull(), 'set1'].index:
final_df.at[row, 'set1'] = []

问题是 df2 是否为空数据帧。它正在给予

ValueError: setting an array element with a sequence.

PS:我使用的是 pandas 0.23.4 版本

最佳答案

Pandas 不适用于一系列列表。您将失去所有矢量化功能,并且对此类系列的任何操作都涉及低效的 Python 级循环。

一个解决方法是定义一系列空列表:

res = df1.merge(df2, how='left')

empty = pd.Series([[] for _ in range(len(df.index))], index=df.index)
res['set1'] = res['set1'].fillna(empty)

print(res)

id c1 set1
0 1 abc [123, 456]
1 2 def [789]
2 3 ghi []

此时一个更好的想法(如果可行的话)是将您的列表分成单独的系列:

res = res.join(pd.DataFrame(res.pop('set1').values.tolist()))

print(res)

id c1 0 1
0 1 abc 123.0 456.0
1 2 def 789.0 NaN
2 3 ghi NaN NaN

关于python - Pandas:将一行中的 nan 转换为空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53537239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com