2016-10-19 11 views
1

"ORG"列のデータに対して部分文字列を処理しようとしています。私は2番目と3番目の文字が必要です。pandasまたはnumpyを使用して部分文字列を行う方法

Attempt 1: dr2['unit'] = dr2[['ORG']][1:2] 
Attempt 2: dr2['unit'] = dr2[['ORG'].str[1:2] 
Attempt 3: dr2['unit'] = dr2[['ORG'].str([1:2]) 

マイデータフレーム:

REGION ORG 
90  4 413 
91  4 413 
92  4 413 
93  5 503 
94  5 503 
95  5 503 
96  5 503 
97  5 504 
98  5 504 
99  1 117 
100  1 117 
101  1 117 
102  1 117 
103  1 117 
104  1 117 
105  1 117 
106  3 3 
107  3 3 
108  3 3 
109  3 3 

予想される出力:任意およびすべてのヘルプのための

REGION ORG UNIT 
90  4 413 13 
91  4 413 13 
92  4 413 13 
93  5 503 03 
94  5 503 03 
95  5 503 03 
96  5 503 03 
97  5 504 04 
98  5 504 04 
99  1 117 17 
100  1 117 17 
101  1 117 17 
102  1 117 17 
103  1 117 17 
104  1 117 17 
105  1 117 17 
106  3 3 03 
107  3 3 03 
108  3 3 03 
109  3 3 03 

おかげで、私は唯一の13を必要とする413ためだから私は、次の試してみました!

答えて

1

角括弧が一致していないため、[-2:]で簡単にスライスできます。

>>> import pandas as pd 
>>> ld = [{'REGION': '4', 'ORG': '413'}, {'REGION': '4', 'ORG': '414'}] 
>>> df = pd.DataFrame(ld) 
>>> df 
    ORG REGION 
0 413  4 
1 414  4 
>>> df['UNIT'] = df['ORG'].str[-2:].apply(str.zfill, args=(2,)) 
>>> df 
    ORG REGION UNIT 
0 413  4 13 
1 414  4 14 
2 3  4 03 
+2

それは通常かなり遅いですと '.apply()'メソッドを使用しないようにしてください:

は、新シリーズのアイテムは、パッドに2の幅とstr.zfillを適用します。 'df.ORG.astype(str).str [-2:]。str.zfill(2)' – MaxU

+0

@MaxUこれは良いことです。注目してくれてありがとう。私はパンダでスピードを拾い始めているだけです:) –

+0

ありがとうMoses。 zfillアドバイスは素晴らしいです!私はそれを使用したことはありませんが、間違いなく便利になるでしょう!また、ありがとう、MaxU。私は変換する多くの適用関数を持っています。 – david

関連する問題