У меня странное поведение при подсчете элементов в столбце наборов с pd.Series.str.len () метод

x = pd.DataFrame({'t': ['', 'A', 'A B', 'A B C']})
x['s'] = x.t.str.split(' ').map(set)
x['s_len'] = x.s.str.len()
x['s_reduced'] = x.s - {'A'}
x['s_reduced_len'] = x.s_reduced.str.len()
print(x)

    t       s           s_len   s_reduced   s_reduced_len
0           {}          1       {}          1
1   A       {A}         1       {}          0
2   A B     {B, A}      2       {B}         1
3   A B C   {C, B, A}   3       {C, B}      2

Почему в этом случае значение x.loc[0, 's_len'] равно 1, а значение x.loc[1, 's_reduced_len'] равно 0?

Это ошибка, и я должен сообщить об этом, или это странное предполагаемое поведение?

Версия панд - 0.20.3.

0
tarashypka 29 Дек 2017 в 13:55

1 ответ

Лучший ответ

Вы можете увидеть ответ, если просто распечатаете содержимое, т.е.

x.s_reduced.values

array([{''}, set(), {'B'}, {'C', 'B'}], dtype=object)

Первая ячейка на самом деле не пуста, если содержит ''. И после вычитания вторая ячейка становится пустым набором. Отсюда разница в длине.

len({''})
1

len(set())
0 
3
Bharath 29 Дек 2017 в 11:10