如果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
当我不使用换行符或反斜杠时,这两种方法都能顺利工作并获得相同的结果:
mask1 = df['abbreviation'].str.contains('CS|DE|CM')
df[mask1]
mask2 = df['abbreviation'].isin(['CS', 'DE', 'CM'])
df[mask2]
输出:
id abbreviation countries
3 4 CM Cameroon
7 8 CS Czech
8 9 DE Germany
但是我注意到当使用反斜杠时,如果有太多的值要过滤,那么str.contains
无法给出正确的答案,但是isin
仍然有效
带反斜杠的第一个选项,仅过滤掉CS
包含的行:
mask1 = df['abbreviation'].str.contains('CS|\
DE|\
CM')
df[mask1]
输出:
id abbreviation countries
7 8 CS Czech
带有反斜杠的第二个选项生成正确的结果:
mask2 = df['abbreviation'].isin(['CS', \
'DE', \
'CM'])
df[mask2]
输出:
id abbreviation countries
3 4 CM Cameroon
7 8 CS Czech
8 9 DE Germany
想知道是否有人能给我建议如何解决这个问题,如果我想使用str.contains
的换行符?谢谢
str.contains
属性,(来自文档)函数签名是在Python中,默认情况下,正则表达式模式(
pat
)不允许空格/换行符如果希望模式更具可读性,例如带有注释、空格(应该忽略)等,则必须为函数调用提供
re.VERBOSE
(docre.VERBOSE)因此,对于您的代码,要使用预期的模式
相关问题 更多 >
编程相关推荐