在pandas数据框中如何进行字符串的左、右和中间截取?

58
在Pandas数据框中,如何应用类似Excel的left('state',2)来仅获取前两个字母?理想情况下,我想学习如何在数据框中使用left、right和mid。因此,需要等效方法而不是针对此特定示例的"技巧"。
data = {'state': ['Auckland', 'Otago', 'Wellington', 'Dunedin', 'Hamilton'],
'year': [2000, 2001, 2002, 2001, 2002],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
df = pd.DataFrame(data)

print df

     pop       state  year
 0  1.5    Auckland  2000
 1  1.7       Otago  2001
 2  3.6  Wellington  2002
 3  2.4     Dunedin  2001
 4  2.9    Hamilton  2002

我想获得这个:

    pop       state     year  StateInitial
 0  1.5       Auckland    2000     Au
 1  1.7       Otago       2001     Ot
 2  3.6       Wellington  2002     We
 3  2.4       Dunedin     2001     Du
 4  2.9       Hamilton    2002     Ha
2个回答

104

每列数值的前两个字母:

>>> df['StateInitial'] = df['state'].str[:2]
>>> df
   pop       state  year StateInitial
0  1.5    Auckland  2000           Au
1  1.7       Otago  2001           Ot
2  3.6  Wellington  2002           We
3  2.4     Dunedin  2001           Du
4  2.9    Hamilton  2002           Ha

对于最后两个字符,可以使用df['state'].str[-2:]。不清楚您对中间部分的具体要求,但您可以使用apply方法将任意函数应用于列:

>>> df['state'].apply(lambda x: x[len(x)/2-1:len(x)/2+1])
0    kl
1    ta
2    in
3    ne
4    il

1
谢谢@alko,我之前尝试过[-2:0]但是由于语法错误而失败了,你的答案解决了这个问题。 - IcemanBerlin
我有另一个例子,我试图应用8位数的前两个数字。然后我收到错误消息:“无效的标量变量索引”。如何应用上述内容以获取“年份”中的最后2个数字? - IcemanBerlin
好的,我来翻译。更多与这个问题相关的内容是如何分离出列“年份”的最后两位数字。以下类似的代码是否可行:df['yearInitial'] = df['year'].int[:2] - IcemanBerlin
@IcemanBerlin 不是,str 是用于字符串类型的列。对于 int 类型,您需要使用 df['year'].astype('str') 将其转换为字符串,然后按照答案中的方式进行操作,或者使用数值运算,例如 df['year'] % 100 - alko
太棒了,这一部分运行良好。df['week2dgts'] = df['Week'].astype('str').str[:2] - IcemanBerlin
显示剩余3条评论

3

关于mid,可能有一个简便的代码是df['state'].str[3,5]

这将从第三个字符开始,并给出字符串的第三个和第四个字符。


1
这里有一个打字错误,应该是str[3:5]而不是str[3,5]。 - gmorissette

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接