猿问

加入两个带有 NA 的 pandas 系列文本

我有两个带有文本的熊猫系列,我想加入它们以获得带有连接文本的系列。


两个系列都基于相同的索引,但一个系列的值较少,这会在加入时导致 NA 值。


这是一个玩具示例:


import pandas as pd


s1 = pd.Series(['red', 'blue', 'green', 'black'], index=[1,2,3,4])

s2 = pd.Series(['large', 'small'], index=[1,3])


s1


    1      red

    2     blue

    3    green

    4    black

    dtype: object


s2


    1    large

    3    small

    dtype: object


现在我想用分隔符加入两个系列的文本以获得以下系列:


1      red,large

2           blue

3    green,small

4          black

这就是我到目前为止所尝试的:


1.

s1.str.cat(s2, sep=',')

1      red,large

2            NaN

3    green,small

4            NaN

dtype: object

NaN 值而不是第一个系列的值


2.

s1.str.cat(s2, sep=',', na_rep='')

1      red,large

2          blue,

3    green,small

4         black,

dtype: object

尾随逗号


3.

s1.str.cat(s2, sep=',', na_rep='').str.strip(',')

这实际上有效,但它使代码更难理解,我不想使用任何额外的代码来修复应该首先正确完成的事情!


4.

pd.concat([s1,s2], axis=1).apply(','.join)

TypeError: sequence item 1: expected str instance, float found

5.

pd.concat([s1,s2], axis=1).agg('|'.join, axis=1)

TypeError: sequence item 1: expected str instance, float found

由于 NA 值而不起作用。


那么我怎样才能做到这一点呢?


神不在的星期二
浏览 86回答 2
2回答

慕田峪9158850

另外的选择s1.append(s2).groupby(level=0).agg(','.join)1      red,large2           blue3    green,small4          blackdtype: object

繁星点点滴滴

一种解决方法可能是在s2之前添加逗号,然后cat使用s1和na_rep=''喜欢:print (s1.str.cat(',' + s2, na_rep=''))1      red,large2           blue3    green,small4          blackdtype: object
随时随地看视频慕课网APP

相关分类

Python
我要回答