我在使用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 :(得分:3)
如果您只打印内容,则可以看到答案
x.s_reduced.values
array([{''}, set(), {'B'}, {'C', 'B'}], dtype=object)
如果持有''
,则第一个单元格不会为空。减去第二个细胞后变成空集。因此长度不同。
len({''})
1
len(set())
0