Соедините две pandas серии текста с помощью NA - PullRequest
1 голос
/ 12 апреля 2020

У меня есть две 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.

Так как я могу получить это право?

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Другой вариант

s1.append(s2).groupby(level=0).agg(','.join)
1      red,large
2           blue
3    green,small
4          black
dtype: object
0 голосов
/ 12 апреля 2020

Один из способов обойти это - добавить запятую на s2 до, а затем cat с s1 и na_rep='', например:

print (s1.str.cat(',' + s2, na_rep=''))
1      red,large
2           blue
3    green,small
4          black
dtype: object
...