【问题标题】:Pandas: get second character of the string, from every rowPandas:从每一行获取字符串的第二个字符
【发布时间】:2015-01-17 04:46:54
【问题描述】:
我在 Pandas 中有一个数据数组,我正在尝试打印 col1 中每个字符串的第二个字符。我不知道该怎么做。我可以轻松地单独打印每个字符串的第二个字符,例如:
array.col1[0][1]
但是我想打印每一行的第二个字符,所以会有一个第二个字符的“列表”。
我试过了
array.col1[0:][1]
但这只是将第二行作为一个整体返回 col1。
有什么建议吗?
【问题讨论】:
标签:
python
string
pandas
dataframe
character
【解决方案1】:
您可以使用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 自己的各种内置字符串方法(split、replace 等)中立即识别。
【解决方案2】:
从 Pandas 0.23.0 开始,如果您的数据是干净的,您会发现通过 pd.Series.str 的 Pandas“矢量化”字符串方法通常表现不佳通过列表理解或使用 @987654323 进行简单迭代@。
例如:
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