Python 如何在数据帧中进行字符串的左、右和中

Python 如何在数据帧中进行字符串的左、右和中,python,pandas,Python,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

在熊猫数据框中,我如何应用一种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

列中每个值的前两个字母:

>>> 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

关于mid,可能需要一个捷径代码 df['state'].str[3,5]


这将从第3个字符开始,并为您提供字符串的第3和第4个字符。

谢谢@alko,我之前尝试了[-2:0],但出现了syntex错误,您的答案已经为我解决了这一问题。我有另一个示例,尝试应用8位数字的前两位数字。然后我得到了错误。”标量变量的索引无效“我如何应用上述方法来获取“年”中的最后两个数字?”@IcemanBerlin您是否需要结果模100(例如,对于
2000
,它将是
0
),或者需要转换为字符串,对于相同的
2000
,要获得
'100'
?基本上我所拥有的是这种格式的201302周,与2013年第2周一样。我不确定它在我的数据帧中是字符串还是整数。但我试图将最后两位数字分开,以便在本例02中返回。我真的想试试看,这一周的最大月份是多少。因此,201302将是1月或1月。第201301周将是2012年12月和2013年1月的最大值,因此是后者,返回01。@IcemanBerlin在这个细节中,在后续评论中得到回答并不是那么微不足道。我建议你用这个问题开始一个新的话题(从几周到几个月的转换)。请注意,您可以使用类似于
df['year']的东西推断数据类型。dtype
。这里有一个输入错误,应该是str[3:5],而不是str[3,5]