str.len()对空集

时间:2017-12-29 10:55:10

标签: python pandas

我在使用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。

1 个答案:

答案 0 :(得分:3)

如果您只打印内容,则可以看到答案

x.s_reduced.values

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

如果持有'',则第一个单元格不会为空。减去第二个细胞后变成空集。因此长度不同。

len({''})
1

len(set())
0