熊猫:从每一行获取字符串的第二个字符

时间:2014-11-19 15:32:13

标签: python string pandas dataframe character

我在Pandas中有一系列数据,我试图在col1中打印每个字符串的第二个字符。我无法弄清楚如何去做。我可以轻松地分别打印每个字符串的第二个字符,例如:

array.col1[0][1]

但是我想从每一行打印第二个字符,所以会有一个"列表"第二个字符。

我已经尝试了

array.col1[0:][1]

但是它只返回第二行作为整个col1。

有什么建议吗?

2 个答案:

答案 0 :(得分:11)

您可以使用str访问列/系列的字符串方法,然后照常切片:

>>> df = pd.DataFrame(['foo', 'bar', 'baz'], columns=['col1'])
>>> df
  col1
0  foo
1  bar
2  baz

>>> df.col1.str[1]
0    o
1    a
2    a

str属性还允许您访问各种非常有用的矢量化字符串方法,其中许多方法可以通过Python自己的内置字符串方法(splitreplace立即识别。等等。)。

答案 1 :(得分:0)

从Pandas 0.23.0开始,如果您的数据是干净的,您会发现pd.Series.str通过“列表表现”或使用map

例如:

from operator import itemgetter

df = pd.DataFrame(['foo', 'bar', 'baz'], columns=['col1'])

df = pd.concat([df]*100000, ignore_index=True)

%timeit pd.Series([i[1] for i in df['col1']])            # 33.7 ms
%timeit pd.Series(list(map(itemgetter(1), df['col1'])))  # 42.2 ms
%timeit df['col1'].str[1]                                # 214 ms

一种特殊情况是当您有大量重复的字符串时,在这种情况下,您可以从将系列转换为categorical的过程中受益:

df['col1'] = df['col1'].astype('category')

%timeit df['col1'].str[1]  # 4.9 ms