• isin方法
  • ==方法:df[df[‘state’] == ‘CA’] ```python import pandas as pd import numpy as np

a=np.array([[‘北京’,’北方’,’一线’,’非沿海’],[‘杭州’,’南方’,’二线’,’非沿海’],[‘深圳’,’南方’,’一线’,’沿海’],[‘烟台’,’北方’,’三线’,’沿海’]]) df1=pd.DataFrame(a,index=[1,2,3,4],columns=[‘城市’,’地理’,’级别’,’是否沿海’]) print(df1) df2=df1.copy()

  1. <a name="yngwX"></a>
  2. # 指定单列多值筛选
  3. ```python
  4. df1[(df1['级别'].isin (['一线','二线']))]

相同,如果我们取反的话就可以筛选出不在一线和二线城市的记录

指定多列多值筛选

  1. df1[((df1['级别'].isin (['一线','二线']))&(df1['是否沿海'].isin(['沿海'])))]

这样就可以轻松的选择特定行数据了,如果是要删除特定行,只需要取反就可以了

  1. df1[~((df1['级别'].isin (['一线','二线']))&(df1['是否沿海'].isin(['沿海'])))]

模糊筛选

str.contains(): 包含一个特定的字符串

  • 参数 na:缺少值 NaN 处理
  • 参数 case:大小写的处理
  • 参数 regex:使用正则表达式模式
  • 请注意,默认情况下,第一个参数中指定的字符串将作为正则表达式模式进行处理

比如我们去筛选级别在一线和二线的城市信息

  1. df1[df1['级别'].str.contains("一线|二线",na=False)]

同样我们可以通过取反把在一线二线城市的信息全部筛选掉:

  1. print(df_nan['name'].str.contains('li', na=False))
  2. # 0 True
  3. # 1 False
  4. # 2 False
  5. # Name: name, dtype: bool
  6. print(df_nan['name'].str.contains('li', na=True))
  7. # 0 True
  8. # 1 False
  9. # 2 True
  10. # Name: name, dtype: bool

用作条件时,如果 na = True,则选择 NaN 的行,如果 na = False,则不选择 NaN 的行。

  1. print(df['name'].str.contains('LI'))
  2. # 0 False
  3. # 1 False
  4. # 2 False
  5. # Name: name, dtype: bool
  6. print(df['name'].str.contains('LI', case=False))
  7. # 0 True
  8. # 1 False
  9. # 2 True
  10. # Name: name, dtype: bool

默认情况下,区分大小写。如果参数 case 为 False,则 case 被忽略。

  1. print(df['name'].str.contains('i.*e', regex=False))
  2. # 0 False
  3. # 1 False
  4. # 2 False
  5. # Name: name, dtype: bool

是否识别字符串为正则表达式

str.endswith():以特定字符串结尾

  • 参数 na:是否选择NA,True False
  • 没有参数 case,因此它始终区分大小写。
  • 第一个参数的字符串在确定中照原样使用,而不作为正则表达式模式处理。

    str.startswith():以特定的字符串开头

    str.match():匹配正则表达式模式

    str.match()对应于 re.match(),并确定字符串的开头是否与模式匹配。如果不是一开始就为 False。
    str.match()与 str.contains()可以以相同的方式指定参数 na,case 和 flag。