2017-02-28 58 views
2

我有一個非常基本的函數,它接受一個字符串的前六個字母。我想將它應用到我的DataFrame中的一列。在熊貓中傳遞基本函數的麻煩

代碼:

import re 
import pandas as pd 
import numpy as np 
dfp = pd.DataFrame({'A' : [np.NaN,np.NaN,3,4,5,5,3,1,5,np.NaN], 
        'B' : [1,0,3,5,0,0,np.NaN,9,0,0], 
        'C' : ['AA1233445','A9875', 'rmacy','Idaho Rx','Ab123455','TV192837','RX','Ohio Drugs','RX12345','USA Pharma'], 
        'D' : [123456,123456,1234567,12345678,12345,12345,12345678,123456789,1234567,np.NaN], 
        'E' : ['Assign','Unassign','Assign','Ugly','Appreciate','Undo','Assign','Unicycle','Assign','Unicorn',]}) 
def six_dig(thing): 
    return str(thing)[:6] 

dfp6= dfp[dfp['C'].apply(six_dig, axis=1)] 

,但我得到:TypeError: six_dig() got an unexpected keyword argument 'axis' 我甚至使用.map()嘗試,但得到了同樣的錯誤。

如果我刪除axis=1我得到:KeyError: ["STUFF"] not in index

我必須失去了一些東西,因爲我已經使用之前數據幀列功能超級簡單...

回答

5

我想你可以:

dfp6 = dfp['C'].str[:6] 

這將返回:

In [14]: dfp6 
Out[14]: 
0 AA1233 
1  A9875 
2  rmacy 
3 Idaho 
4 Ab1234 
5 TV1928 
6  RX 
7 Ohio D 
8 RX1234 
9 USA Ph 
Name: C, dtype: object 
+0

你是絕對正確的。謝謝你爲我節省了一小步。 @潘森的回答也顯示我出了什麼問題。 – MattR

+0

@MattR很高興它有幫助! –

2

使用你[R例如,下面的作品就好了:

print(dfp['C'].map(six_dig)) 
0 AA1233 
1  A9875 
2  rmacy 
3 Idaho 
4 Ab1234 
5 TV1928 
6  RX 
7 Ohio D 
8 RX1234 
9 USA Ph 
Name: C, dtype: object 
+0

我知道這件事很簡單....我在我的例子周圍加了一個額外的'dfp []'......它讓你輸入這個信息讓我看到它。 – MattR

1

如果你想使用矢量功能 - 這裏有一個例子:

In [35]: def my_slice(ser, start=0, end=10, step=1): 
    ...:  return ser.str.slice(start, end, step) 
    ...: 

In [36]: my_slice(dfp.C, end=6) 
Out[36]: 
0 AA1233 
1  A9875 
2  rmacy 
3 Idaho 
4 Ab1234 
5 TV1928 
6  RX 
7 Ohio D 
8 RX1234 
9 USA Ph 
Name: C, dtype: object