2014-01-07 15 views
28

pandasデータフレームの場合最初の2文字のみを取り出すためにleft( 'state'、2)という種類を適用するにはどうすればよいですか?理想的には、データフレーム内で左、右、および中央を使用する方法も学びたいと思っています。したがって、この具体的な例では、「同種」ではなく同等のものが必要です。pandasデータフレームの文字列の左、右、中央の操作方法

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 

答えて

44

最初の2つの文字:df['state'].str[-2:]だろう最後の二つについては

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

を。あなたが真ん中に必要正確に何か分からないのですが、あなたは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

+0

私は8桁の数字の最初の2桁を適用しようとしている別の例があります。それから私はエラーを取得します。 'スカラー変数への無効なインデックス'上記の2つの数値を 'year'に適用するにはどうすればよいですか? – IcemanBerlin

+0

@IcemanBerlin同じ「2000」に対して「100」を得るには、結果を100(2000の場合は「0」)にする必要がありますか、文字列にキャストする必要がありますか? – alko

関連する問題