首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在熊猫中用列表值连接2列(避免重复和NaN)

在熊猫中用列表值连接2列(避免重复和NaN)
EN

Stack Overflow用户
提问于 2022-01-07 07:00:30
回答 4查看 158关注 0票数 2

我有熊猫的资料如下,

代码语言:javascript
复制
loc_1                               loc_2                             

[mumbai, gujarat, sri lanka]        [chennai, UP]
[Goa, telangana]                    [Kashmir, Goa, Rajkot]
NaN                                 [Bihar, Orissa]

我想创建一个新的专栏,它是以上两列的结合,我确实搜索了其他类似的问题,但我面临的问题是,

当我这么做的时候

代码语言:javascript
复制
data['locations'] = data['loc_1'] + data['loc_2']

Output
--------
loc_1                               loc_2                       locations

[mumbai, gujarat, sri lanka]        [chennai, UP]                [mumbai, gujarat, sri lanka,chennai, UP]   
[Goa, telangana]                    [Kashmir, Goa, Rajkot]       [Goa, telangana,Kashmir, Goa, Rajkot]
NaN                                 [Bihar, Orissa]              NaN

问题

正如您在上面看到的,有重复的值以及形成的NaN值。如何避开他们?

记住

原始数据集包含列表、str和NaN格式的值。

数据集:

代码语言:javascript
复制
loc = pd.DataFrame({
'loc_1': [['mumbai', 'gujarat', 'sri lanka'],['Goa', 'telangana'],np.nan],
'loc_2':[['chennai','UP'],['kashmir','goa','rajkot'],['bihar','orissa']],
'loc_3':['Chennai','Bangalore','Vizag']

})
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-01-07 07:05:54

首先,用替换NaNs (floats)连接值,使其为空列表:

代码语言:javascript
复制
data['locations'] = data['loc_1'].apply(lambda x: [] if isinstance(x, float) else x) + data['loc_2']

然后通过dict.fromkeys转换成字典,删除与原版相同顺序的副本。

代码语言:javascript
复制
data['locations'] = data['locations'].apply(lambda x: list(dict.fromkeys(x)))

如果订单不重要,可以使用一组:

代码语言:javascript
复制
data['locations'] = data['locations'].apply(lambda x: list(set(x)))
票数 2
EN

Stack Overflow用户

发布于 2022-01-07 07:19:34

如果使用loc.fillna("", inplace=True),那么包含空值的添加就不会再产生NaNs了。

若要从包含列表的列中筛选重复项,请使用:

代码语言:javascript
复制
loc['locations'] = loc['locations'].apply(lambda locs: list(set(locs)))
票数 1
EN

Stack Overflow用户

发布于 2022-01-07 07:35:36

对清单的理解可以很快。让我们试试

代码语言:javascript
复制
   data['location']=[list(set([] if isinstance(x, float) else x).union(set(y))) for x,y in zip (data['loc_1'],data['loc_2'])]

 

      loc_1                     loc_2      loc_3  \
0  [mumbai, gujarat, sri lanka]  [chennai, UP, sri lanka]    Chennai   
1              [Goa, telangana]    [kashmir, goa, rajkot]  Bangalore   
2                           NaN           [bihar, orissa]      Vizag   

                                    location  
0  [chennai, UP, gujarat, mumbai, sri lanka]  
1     [telangana, rajkot, goa, kashmir, Goa]  
2                            [bihar, orissa]  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70617623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档