从DF中删除部分字符串匹配

时间:2017-07-26 14:43:29

标签: pandas python-3.6

从以下df我想删除所有不以CBT_21或CBT_TY1开头的行:

               code        date type  strike  settlement
0    CBT_06_F2016_S  2015-01-02    P   240.0        2.45
1    CBT_06_F2016_S  2015-01-02    P   360.0       48.60
2    CBT_21_F2016_S  2015-01-02    P   210.0        0.80
3    CBT_TY1_F2016_S 2015-01-02    P   320.0       23.20
4    CBT_06_F2016_S  2015-01-02    C   430.0        3.70

期望的输出:

               code        date type  strike  settlement
0    CBT_21_F2016_S  2015-01-02    P   210.0        0.80
1    CBT_TY1_F2016_S 2015-01-02    P   320.0       23.20

请问最有效的pythonic方法是什么?我有一个非常大的文件要处理。

1 个答案:

答案 0 :(得分:1)

您可以将boolean indexingstartswith一起使用,并使用|(按位or)或str.contains^一起使用字符串:

m = df['code'].str.startswith('CBT_21') | df['code'].str.startswith('CBT_TY1')
df = df[m]
print (df)
              code        date type  strike  settlement
2   CBT_21_F2016_S  2015-01-02    P   210.0         0.8
3  CBT_TY1_F2016_S  2015-01-02    P   320.0        23.2

另一种解决方案:

m = df['code'].str.contains('^CBT_21|^CBT_TY1')
df = df[m]
print (df)
              code        date type  strike  settlement
2   CBT_21_F2016_S  2015-01-02    P   210.0         0.8
3  CBT_TY1_F2016_S  2015-01-02    P   320.0        23.2