添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • ==
  • 部分匹配
    • str.contains():包含一个特定的字符串
      • 参数na:缺少值NaN处理
      • 参数case:大小写我的处理
      • 参数regex:使用正则表达式模式
    • str.endswith():以特定字符串结尾
    • str.startswith():以特定的字符串开头
    • str.match():匹配正则表达式模式
      要提取部分匹配的行,可以使用pandas的(str.xxx())方法,根据指定条件提取的字符串方法。
  • 这次以以下数据为例

    import pandas as pd
    df = pd.read_csv('./data/08/sample_pandas_normal.csv').head(3)
    print(df)
    #       name  age state  point
    # 0    Alice   24    NY     64
    # 1      Bob   42    CA     92
    # 2  Charlie   18    CA     70
    

    行的提取(选择)方法

    首先,展示如何从pandas.DataFrame中提取(选择)行以获得新的pandas.DataFrame。

    使用布尔值的布尔列表(数组)或pandas.Series的话,只能提取(选择)True行。

    mask = [True, False, True]
    df_mask = df[mask]
    print(df_mask)
    #       name  age state  point
    # 0    Alice   24    NY     64
    # 2  Charlie   18    CA     70
    

    因此,对于具有字符串元素的列,是否能够获得根据条件的布尔列表就足够了。

    如果元素与字符串完全匹配,则使用==获取为True的pandas.Series。

    print(df['state'] == 'CA')
    # 0    False
    # 1     True
    # 2     True
    # Name: state, dtype: bool
    print(df[df['state'] == 'CA'])
    #       name  age state  point
    # 1      Bob   42    CA     92
    # 2  Charlie   18    CA     70
    

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

    pandas.Series字符串方法str.contains()允许获取包含特定字符串的pandas.Series.

    print(df['name'].str.contains('li'))
    # 0     True
    # 1    False
    # 2     True
    # Name: name, dtype: bool
    print(df[df['name'].str.contains('li')])
    #       name  age state  point
    # 0    Alice   24    NY     64
    # 2  Charlie   18    CA     70
    

    请注意,默认情况下,第一个参数中指定的字符串将作为正则表达式模式进行处理,如下所述。

    参数na:缺少值NaN处理

    如果元素是缺失值NaN,则默认情况下它将返回NaN而不是True或False。因此,使用pandas.Series提取该行是错误的。

    df_nan = df.copy()
    df_nan.iloc[2, 0] = float('nan')
    print(df_nan)
    #     name  age state  point
    # 0  Alice   24    NY     64
    # 1    Bob   42    CA     92
    # 2    NaN   18    CA     70
    print(df_nan['name'].str.contains('li'))
    # 0     True
    # 1    False
    # 2      NaN
    # Name: name, dtype: object
    # print(df_nan[df_nan['name'].str.contains('li')])
    # ValueError: cannot index with vector containing NA / NaN values
    

    可以通过str.contains()的参数na来指定替换NaN结果的值。

    print(df_nan['name'].str.contains('li', na=False))
    # 0     True
    # 1    False
    # 2    False
    # Name: name, dtype: bool
    print(df_nan['name'].str.contains('li', na=True))
    # 0     True
    # 1    False
    # 2     True
    # Name: name, dtype: bool
    

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

    参数case:大小写我的处理

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

    print(df['name'].str.contains('LI'))
    # 0    False
    # 1    False
    # 2    False
    # Name: name, dtype: bool
    print(df['name'].str.contains('LI', case=False))
    # 0     True
    # 1    False
    # 2     True
    # Name: name, dtype: bool
    

    参数regex:使用正则表达式模式

    使用str.contains()时要记住的一件事是,默认情况下,指定为第一个参数的字符串将作为正则表达式模式进行处理。

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

    如果参数ragex为False,则确定是否包含第一个参数的字符串本身。

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

    例如,如果要判断是否包含正则表达式的特殊字符,例如?,。,*,则需要设置regex = False。当然,可以指定一个正则表达式模式,以转义\?等特殊字符。

    请注意,默认值可能会导致错误。

    df_q = df.copy()
    df_q.iloc[2, 0] += '?'
    print(df_q)
    #        name  age state  point
    # 0     Alice   24    NY     64
    # 1       Bob   42    CA     92
    # 2  Charlie?   18    CA     70
    # print(df_q['name'].str.contains('?'))
    # error: nothing to repeat at position 0
    print(df_q['name'].str.contains('?', regex=False))
    # 0    False
    # 1    False
    # 2     True
    # Name: name, dtype: bool
    print(df_q['name'].str.contains('\?'))
    # 0    False
    # 1    False
    # 2     True
    # Name: name, dtype: bool
    

    str.contains()等同于re.search(),并且可以在flags参数中指定正则表达式标志。如稍后所述,还有对应于re.match()的str.match()。

    请注意,下面要介绍的str.endswith()如果想要确定end ?,会更容易,如本例所示。

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

    pandas.Series字符串方法str.endswith()可以获取以特定字符串结尾的pandas.Series。

    print(df['name'].str.endswith('e'))
    # 0     True
    # 1    False
    # 2     True
    # Name: name, dtype: bool
    print(df[df['name'].str.endswith('e')])
    #       name  age state  point
    # 0    Alice   24    NY     64
    # 2  Charlie   18    CA     70
    

    str.endswith()也有一个参数na。如果要选择缺失值NaN的行,则设置na = True;如果不想选择,则将na = False设置。

    没有参数case,因此它始终区分大小写。

    另外,第一个参数的字符串在确定中照原样使用,而不作为正则表达式模式处理。

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

    pandas.Series字符串方法str.startswith()可以获取以特定字符串开头的pandas.Series。

    print(df['name'].str.startswith('B'))
    # 0    False
    # 1     True
    # 2    False
    # Name: name, dtype: bool
    print(df[df['name'].str.startswith('B')])
    #   name  age state  point
    # 1  Bob   42    CA     92
    

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

    pandas.Series字符串方法str.match()可以获取与正则表达式模式匹配的pandas.Series。

    print(df['name'].str.match('.*i.*e'))
    # 0     True
    # 1    False
    # 2     True
    # Name: name, dtype: bool
    print(df[df['name'].str.match('.*i.*e')])
    #       name  age state  point
    # 0    Alice   24    NY     64
    # 2  Charlie   18    CA     70
    

    如上所述,str.match()对应于re.match(),并确定字符串的开头是否与模式匹配。如果不是一开始就为False。

    print(df['name'].str.match('.*i'))
    # 0     True
    # 1    False
    # 2     True
    # Name: name, dtype: bool
    print(df['name'].str.match('i.*e'))
    # 0    False
    # 1    False
    # 2    False
    # Name: name, dtype: bool
    

    当需要确定是否包括与模式匹配的部分时,不仅在开始时,而且默认使用与上述re.search()等效的re.contains()(regex = True)。

    str.match()与str.contains()可以以相同的方式指定参数na,case和flag。

    Pandas如何筛选包含特定字符串或满足特定模式的数据列在使用 Pandas数据处理时,经常需要对某一列进筛选,只选择符合要求的。本文将介绍两种方法:str.contains() 和 str.match() 函数。这两个函数都是 Pandas 提供的字符串操作函数,可以方便地筛选指定列中符合特定模式的字符串。 假设我们有一个名为"data.csv"的CSV文件,其中包含了一些数据。下面的示例演示了如何提取包含特定字符串数据。假设我们要提取"column_name"列中包含字符串"keyword"的数据。来同时筛选两个条件,即"column1"列包含"keyword1"字符串并且"column2"列包含"keyword2"字符串。上面的代码将筛选后的结果保存到名为"filtered_data.csv"的CSV文件中,并且不包含索引列。最后,我们可以将筛选后的结果保存到一个新的CSV文件中,以便后续使用。 它是一个创新的Python库,旨在将全文搜索功能直接引入Pandas数据框,为数据科学家和机器学习工程师提供了一种简单而强大的方式来实现高效的文本搜索和排序。通过使用SearchArray,我们可以轻松地在Pandas数据框中实现高效的全文搜索功能,为数据分析和机器学习项目增添新的维度。它不仅简化了搜索功能的实现过程,还为创新型搜索应用的开发铺平了道路。然而,需要注意的是,SearchArray主要针对中小型数据集和原型开发设计,对于需要处理海量数据的生产环境,传统搜索引擎可能仍然是更好的选择。 # 在列标签为code这一列中把包含size.002027字符串全部挑出来 data=data[data['code'].str.contains("szse.002027")] # 存入新文件 data.to_csv('2027.csv',index=False) 利用FuzzyWuzzy库匹配字符串1. 背景前言2. FuzzyWuzzy库介绍2.1 安装2.1 fuzz模块2.1.1 简单匹配(Ratio)2.1.2 非完全匹配(Partial Ratio)2.1.3 忽略顺序匹配(Token Sort Ratio)2.1.4 去重子集匹配(Token Set Ratio)2.2 process模块2.2.1 extract提取多条数据2.2.2 extractOne提取一条数据3. pandas实战应用3.1 公司名称字段模糊匹配3.1.1 参数讲解:3.1.2 resault = df['某列名'].str.contains('某字符串') resault.fillna(value=False,inplace = True) df[resault] 这个是通过str.contains,返回的true或者false,然后为了以防万一有空值,所以用fillna处理,将空值替换成Flase之后用参数i df = pd.DataFrame({'species': ['bear', 'bear', 'marsupial'], 'population': [1864, 22000, 80000]}, index=['panda', 'polar', 'koala']) Python学习教程:如何正确使用Pandas库提升项目的运速度?如果你从事大数据工作,用PythonPandas库时会发现很多惊喜。Pandas在数据科学和分析领域扮演越来越重要的角色,尤其是对于从Excel和VBA转向Python的用户。所以,对于数据科学家,数据分析师,数据工程师,Pandas是什么呢?Pandas文档里的对它的介绍是:“快速、灵活、和易于理解的数据结构,以此让处理关系型... 除了使用 .str.contains() 方法外,还有其他一些方法可以用于字符串筛选,例如 .str.startswith() 和 .str.endswith() 可以用于筛选指定字符串开头或结尾的数据。接着,我们可以使用 Pandas 的 .str.contains() 方法来筛选包含指定字符的数据。这将返回一个新的 DataFrame,其中包含所有动物名称中包含 ‘a’ 或 ‘i’ 的数据。这将返回一个新的 DataFrame,其中包含所有水果名称或颜色中包含 ‘e’ 的数据。 如何在python pandas的dataframe对象筛选包含特定字符串? 以数据集df为例,df包含有name的。如何筛选出name中,包含‘酒’字符? df = df[df['name'].str.contains('酒')] 是不是超级简单,试起来吧! 这里可以用来股票量化分析中,对业股票分析,筛选业分类中包含酒的业。 match(pat, case=True, na=False):返回一个布尔型的序列,表示每个字符串是否以指定的正则表达式匹配。contains(sub, case=True, na=False):返回一个布尔型的序列,表示每个字符串是否包含指定的子串。replace(old, new, count=-1, regex=False):将字符串中的指定子串替换为新的字符串。format(*args, **kwargs):将字符串中的占位符替换为指定的值,支持位置参数和关键字参数。