如何在熊猫上应用切片系列字符串
问题描述:
我在玩pandas,并尝试将字符串切片应用于一系列字符串对象。 非但没有琴弦切片,该系列被切片:如何在熊猫上应用切片系列字符串
In [22]: s = p.Series(data=['abcdef']*20)
In [23]: s.apply(lambda x:x[:2])
Out[24]:
0 abcdef
1 abcdef
在另一方面:
In [25]: s.apply(lambda x:x+'qwerty')
Out[25]:
0 abcdefqwerty
1 abcdefqwerty
2 abcdefqwerty
...
我得到了它通过使用地图功能,而不是工作,但我想我错过了它应该如何工作。
非常感谢澄清。
答
apply
首先尝试将该功能应用于整个系列。只有在失败时它才会将给定的函数映射到每个元素。 [:2]
是一个系列上的有效函数,+ 'qwerty'
显然不是,这就是为什么你得到后者的隐式映射。如果你总是想要做映射,你可以使用s.map
。参考
apply
的源代码:
try:
result = func(self)
if not isinstance(result, Series):
result = Series(result, index=self.index, name=self.name)
return result
except Exception:
mapped = lib.map_infer(self.values, func)
return Series(mapped, index=self.index, name=self.name)
答
你在正确的轨道上:
In [3]: s = Series(data=['abcdef']*20)
In [4]: s
Out[4]:
0 abcdef
1 abcdef
2 abcdef
3 abcdef
4 abcdef
5 abcdef
6 abcdef
7 abcdef
8 abcdef
9 abcdef
10 abcdef
11 abcdef
12 abcdef
13 abcdef
14 abcdef
15 abcdef
16 abcdef
17 abcdef
18 abcdef
19 abcdef
In [5]: s.map(lambda x: x[:2])
Out[5]:
0 ab
1 ab
2 ab
3 ab
4 ab
5 ab
6 ab
7 ab
8 ab
9 ab
10 ab
11 ab
12 ab
13 ab
14 ab
15 ab
16 ab
17 ab
18 ab
19 ab
我真的想添加一系列量化的,NA-友好字符串处理熊猫工具(See here)。始终感谢任何开发帮助。
答
韦斯麦金尼的答案是有点过时了,但他对他的愿望取得良好 - 大熊猫现在拥有高效的字符串处理方法,包括切片:
In [2]: s = Series(data=['abcdef']*20)
In [3]: s.str[:2]
Out[3]:
0 ab
1 ab
2 ab
...
我不认为你错过了什么。 AFAIK,整个系列的操作应该是数字化的,而不是像字符串切片这样的事情。编辑:实际上,重新阅读API文档,也许不是:http://pandas.sourceforge.net/generated/pandas.Series.apply.html?highlight=apply#pandas-series-apply所以我不确定。 – AdamKG 2012-01-12 20:58:24
切片熊猫?这只是意味着! – juliomalegria 2012-01-12 21:26:57