• str.contains():包含一个特定的字符串
    - 参数na:缺少值NaN处理
    - 参数case:大小写的处理
    - 参数regex:使用正则表达式模式
  • str.endswith():以特定字符串结尾
  • str.startswith():以特定的字符串开头
  • str.match():匹配正则表达式模式
    注:要提取部分匹配的行,可以使用pandas的(str.xxx())方法,根据指定条件提取的字符串方法。

2. 示例

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

2.1 布尔操作符

使用布尔列表(数组)或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
123456

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

2.2 完全匹配操作符(==

如果元素与字符串完全匹配,则使用==获取为Truepandas.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

2.3 部分匹配操作符

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

pandas.Seriespandas.index(columns)字符串方法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
 

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

2.3.2 参数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的行。

2.3.3 参数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

2.3.4 参数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()

2.3.5 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,因此它始终区分大小写。

另外,第一个参数的字符串不作为正则表达式模式处理。

2.3.6str.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

2.3.7 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
1234567891011
 

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

Pandas提取含有指定字符串的行(完全匹配,部分匹配)1. 概述接下来,讲解如何采用正则的方式提取DataFrame子集完全匹配==部分匹配str.contains():包含一个特定的字符串- 参数na:缺少值NaN处理- 参数case:大小写的处理- 参数regex:使用正则表达式模式str.endswith():以特定字符串结尾str.startswith():以特定的字符串开头str.match():匹配正则表达式模式注:要提取部分匹配的行,可以使用pand # create new Title column df['Title'] = df['Name'].str.extract('([A-Za-z]+)\.', expand=True) 提取其中的title作为新的一。 以上就是对从pandas的单元格中提取字符串的认识。 这篇从pandas一个单元格的字符串提取字符串方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:pandas
pandas取出包含某个值的所有 test_df = test_df[test_df[‘from_account’].str.contains(‘fcwhx’)] pandas取出不包含某个值的所有 test_df = test_df[~test_df[‘from_account’].str.contains(‘fcwhx’)] 2、所在内容是割裂的 先转成str格式再用contains筛选。 df_fintech = df_text[df_text['业务一级分类'].str.contains("金融科技")] 3、筛选值属于某个范围内的,用isin df.loc[df['column_name'].isin(some_values)] # some_values是可迭代对象 4、多种条
resault = df['某名'].str.contains('某字符串') resault.fillna(value=False,inplace = True) df[resault] 这个是通过str.contains,返回的true或者false,然后为了以防万一有空值,所以用fillna处理,将空值替换成Flase之后用参数i
pythondataframe筛选含有某些字段的(contains和isin) import pandas as pd df = {'DataBase':['mysql','test','test','test','test'],'table':['user','student','course','sc','book']} df = pd.DataFrame(df) print(df) print("-"*12) print('================') list_one=['student
如何在python pandasdataframe对象筛选包含特定字符串? 以数据集df为例,df包含有name的。如何筛选出name中,包含‘酒’字符的? df = df[df['name'].str.contains('酒')] 是不是超级简单,试起来吧! 这里可以用来股票量化分析中,对业股票分析,筛选业分类中包含酒的业。 date_key:某名 ‘8’:检索这一中是否含有字符‘’8‘’ bool_index :表形式,长度为dataframe数(值为true:该含有该字符 或 false:该含有该字符) filter_data :过滤后的dataframe数据 ......
假如有一全是字符串dataframe,希望提取包含特定字符的所有数据,该如何提取呢? 因为之前尝试使用filter,发现不通,最终找到这个得通的方法。 举例说明: 我希望提取所有包含'Mr.'的人名 1、首先将他们进字符串化,并得到其对应的布尔值: >>> bool = df.str.contains('Mr\.') #不要忘记正则表达式的写法,'.'在...
你需要找出所有包含字符串503816x1343x的,可以这么写: df_open[df_open['short_channel_id'].str.contains('503816')] 因为这个表中short_channel_id是唯一的,所以只有一条数据,如果不唯一,则所有的都会筛选出来。 如,筛选出所有包含50的,则如下: 这些中的字符串包含50. 如果是数字,看我下一篇博客
dataframe的某一均为字符串格式,想筛选含有特定字符串,具体实现代码如下: data1=df[df['标题'].str.contains('摘要')] #这是使用语法,模糊匹配 df[ df['通信名称'].str.contains('联通|移动|小灵通|电信')] #这一种方法不是匹配,而是等于后面表中的值,要注意区别 df[ df['通信名称'].isin(['联通','移动','小灵通','电信'])] 包含字符串比较多时就用’|‘管道符隔开 那如果是不包含呢,取出不包含这些
ae26e5e3db7626dcaf6819ce5492d534 "04e9dc04d4b600d574d67b298a7dea7d,302b43aa476e00a0169b58580e8fa0f8,33290c52ef2be1b788f0108e2260793f, a845733e3729a136889c07d275bcc3c5 68e605feb5344fd413587