我有一个包含两列a和b的df。
import pandas as pd
raw_data = {'a': ['2019145236792', 'abc_def date_1220', '2020124832852', 'jhi_abc this_1219_abc'],
'b': ['tom','john','mark','jim']}
df = pd.DataFrame(raw_data, columns=['a', 'b'])
df
a b
0 2019145236792 tom
1 abc_def date_1220 john
2 2020124832852 mark
3 jhi_abc this_1219_abc20 jim我想要分离只包含20的数据。20的位置不会改变。
例如:2020124832852和abc_def date_1220
预期输出:
a b
0 abc_def date_1220 john
1 2020124832852 mark发布于 2020-04-28 17:46:10
将boolean indexing与comapre by Series.eq和str索引一起使用|链接的按位OR使用第二个掩码并将Series.str.extract用于date_之后的值
m1 = df['a'].str[2:4].eq('20')
m2 = df['a'].str.extract('date_(.*)', expand=False).str[2:4].eq('20')
df = df[m1 | m2]
print (df)
a b
1 abc_def date_1220 john
2 2020124832852 mark编辑:
m2 = df['a'].str.split('_', n=2).str[2].str[2:4].eq('20')发布于 2020-04-28 18:08:22
您可以使用列表理解来获取所需的行,但必须指定所需的位置:
import re
req_pos = {2, 15}
df[[any(e.start() in req_pos for e in re.finditer('20', s)) for s in df.a]]

https://stackoverflow.com/questions/61477170
复制相似问题