Я пытаюсь отфильтровать строки, если abbreviation
содержит 'CS', 'DE', 'CM'
с isin
и str.contains
методами:
id,abbreviation,countries
1,CH,Switzerland
2,CZ,Czech Republic
3,CL,Chile
4,CM,Cameroon
5,CN,China
6,DJ,Djibouti
7,CR,Costa Rica
8,CS,Czech
9,DE,Germany
10,CY,Cyprus
Когда я не использую перевод строки или backsla sh, оба работать гладко и получить тот же результат:
mask1 = df['abbreviation'].str.contains('CS|DE|CM')
df[mask1]
mask2 = df['abbreviation'].isin(['CS', 'DE', 'CM'])
df[mask2]
Out:
id abbreviation countries
3 4 CM Cameroon
7 8 CS Czech
8 9 DE Germany
Но я заметил, что при использовании backsla sh, если для фильтрации слишком много значений, str.contains
завершится неудачно чтобы дать правильный ответ, но isin
все еще работает.
Первый вариант с backsla sh, только отфильтровать CS
содержащиеся строки:
mask1 = df['abbreviation'].str.contains('CS|\
DE|\
CM')
df[mask1]
Out:
id abbreviation countries
7 8 CS Czech
Второй вариант с backsla sh дает правильный результат:
mask2 = df['abbreviation'].isin(['CS', \
'DE', \
'CM'])
df[mask2]
Out:
id abbreviation countries
3 4 CM Cameroon
7 8 CS Czech
8 9 DE Germany
Просто интересно, кто-нибудь может дать мне совет, как решить эту проблему , если я хочу использовать разрыв строки для str.contains
? Спасибо.