为什么以下两个代码段会产生不同的结果?
import pandas as pd
s = pd.Series(['abc','abcq', 'foo', 'baz'])
s.isin(['abc'])
VS
import pandas as pd
s = pd.Series(['abc','abcq', 'foo', 'baz'])
s.isin(list('abc'))
答案 0 :(得分:1)
import pandas as pd
s = pd.Series(['abc','abcq', 'foo', 'baz'])
print s.isin(['abc'])
print s.isin(list('abc'))
# why?
print list('abc')
输出:
0 True
1 False
2 False
3 False
dtype: bool
0 False
1 False
2 False
3 False
dtype: bool
['a', 'b', 'c']
答案 1 :(得分:1)
只需查看list
的{{3}}:
class list([ iterable ])
返回一个列表,其项目与 iterable 的项目相同且顺序相同。
...
例如,list('abc')
返回['a', 'b', 'c']
,list( (1, 2, 3) )
返回[1, 2, 3]
。
您看到list()
何时被赋予'abc'
,它会返回['a', 'b', 'c']
,因为即使字符串也是可迭代的。正如list(('a', 'b', 'c'))
变为['a', 'b', 'c']
一样,当iterable是字符串时,list()
会将字符串拆分为单个字符。但是,使用['abc']
创建一个包含一个元素的列表:字符串。
答案 2 :(得分:0)
第一个示例返回一个布尔系列,显示系列中的每个元素是否完全包含在['abc']
中。
第二次测试系列中的每个元素是否完全包含在['a', 'b', 'c']
这是因为list('abc')
产生['a', 'b', 'c']
因此
s.isin(list('abc'))
与s.isin(['a', 'b', 'c'])
相同,与s.isin(['abc'])