如果大于len,Pandas会更改列值

时间:2016-06-10 18:32:54

标签: python csv pandas

如果长度大于x

,我试图使用if语句来更改列中的值

我的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"

1 个答案:

答案 0 :(得分: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