2016-06-10 22 views
1

我想使用if語句來一列中的值更改,如果有長度大於X熊貓變化列值如果大於LEN

我的CSV數據更大..

ID   Test_Case           TC_NUM 
14581,dialog_testcase_4000.0134_mvp_not_understood-inprogress.xml,4000.0134 
14582,dialog_testcase_4000.0135_mvp_not_understood-inprogress.xml,4000.0135 
14583,dialog_testcase_4000.0136_mvp_not_understood-inprogress.xml,4000.0136 
14584,dialog_testcase_4000.0137_mvp_not_understood_6.2.0-inprogress.xml,4000.01376.2.0 
14585,dialog_testcase_4000.0138_mvp_not_understood_6.2.0-inprogress.xml,4000.01386.2.0 

我想要:

ID   Test_Case           TC_NUM 
14581,dialog_testcase_4000.0134_mvp_not_understood-inprogress.xml,4000.0134 
14582,dialog_testcase_4000.0135_mvp_not_understood-inprogress.xml,4000.0135 
14583,dialog_testcase_4000.0136_mvp_not_understood-inprogress.xml,4000.0136 
14584,dialog_testcase_4000.0137_mvp_not_understood_6.2.0-inprogress.xml,4000.0137 
14585,dialog_testcase_4000.0138_mvp_not_understood_6.2.0-inprogress.xml,4000.0138 

我目前的代碼是能夠提取一些正確的列,但如果有額外的數字在那裏混亂。

df1['TC_NUM'] = df1['TC_NUM'].str.replace(r'[^0-9.]+', '') 

df1['TC_NUM'] = df1['TC_NUM'].str[:-1] 

我的想法/嘗試使用if語句來糾正此問題。

if dfidtcnum(len['TC_NUM'] > 12): 
    print "True" 
+0

'DF1 [ 'TC_NUM'] = DF1 [ 'TC_NUM'] str.replace(R'\ [^ \] {1, 3} \。\ d * $','')'可以用於你在這裏顯示的內容,但這不是一個真正的通用解決方案。只要第二個和第三個點之間的數字在1到3個數字之間,它就可以工作。 – Abdou

回答

3

IIUC可以使用mask:。

print (df.TC_NUM.str.len() > 9) 
0 False 
1 False 
2 False 
3  True 
4  True 
Name: TC_NUM, dtype: bool 


df['TC_NUM'] = df.TC_NUM.mask(df.TC_NUM.str.len() > 9, df.TC_NUM.str[:-5]) 
print (df) 
     ID           Test_Case  TC_NUM 
0 14581 dialog_testcase_4000.0134_mvp_not_understood-i... 4000.0134 
1 14582 dialog_testcase_4000.0135_mvp_not_understood-i... 4000.0135 
2 14583 dialog_testcase_4000.0136_mvp_not_understood-i... 4000.0136 
3 14584 dialog_testcase_4000.0137_mvp_not_understood_6... 4000.0137 
4 14585 dialog_testcase_4000.0138_mvp_not_understood_6... 4000.0138 
+0

工作完美謝謝你jezrael – Anekdotin