Pandas 使用部分字符串匹配从DF中删除行
从以下df中,我想删除所有不以CBT_21或CBT_TY1开头的行:Pandas 使用部分字符串匹配从DF中删除行,pandas,python-3.6,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
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方法?我有一个非常大的文件要处理。您可以使用with和chain by
(按位或
)或使用with^
来选择字符串的开头:
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