2016-06-10 48 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