25+ Python 数据操作教程(第十一节PYTHON 中的字符串函数及示例)

203 阅读5分钟

常用字符串函数列表

下表显示了许多常见的字符串函数及其说明及其在 MS Excel 中的等效函数。我们在工作场所都使用MS Excel,并且熟悉MS Excel中使用的功能。MS EXCEL和Python中字符串函数的比较可以帮助你快速学习函数并在面试前做好准备。

功能描述MS Excel 函数
字符串[:N]从字符串开头提取 N 个字符。左边( )
mystring[-N:]从字符串末尾提取 N 个字符正确的( )
字符串[X:Y]从字符串中间提取字符,从 X 位置开始,以 Y 结束中( )
str.split(sep=' ')分割字符串-
str.replace(旧子字符串,新子字符串)用不同的子字符串替换部分文本代替( )
str.lower()将字符转换为小写降低( )
str.upper()将字符转换为大写上部( )
str.contains('模式', case=False)检查模式是否匹配(Pandas 函数)SQL LIKE 运算符
str.extract(正则表达式)返回匹配的值(Pandas 函数)-
str.count('sub_string')计算字符串中模式的出现次数-
字符串查找()返回子字符串或模式的位置寻找( )
str.isalnum()检查字符串是否仅由字母数字字符组成-
str.islower()检查字符是否全部小写-
str.isupper()检查字符是否全部大写-
str.isnumeric()检查字符串是否仅由数字字符组成-
str.isspace()检查字符串是否仅由空格字符组成-
仅有的( )计算字符串长度仅有的( )
猫( )连接字符串(Pandas 函数)连接( )
分隔符.join(str)连接字符串连接( )

左、右和中功能

如果您是 MS Excel 中级用户,您一定使用过 LEFT、RIGHT 和 MID 函数。这些函数用于从字符串中提取 N 个字符或字母。

1. 从字符串开头提取前两个字符

mystring = "Hey buddy, wassup?"
mystring[:2]

Out[1]: 'He'

  1. string[start:stop:step] 表示项目从 0(默认)开始到(stop-1),步长为 1(默认)。
  2. mystring[:2] 相当于 mystring[0:2]
  3. mystring[:2] 告诉 Python 从字符串对象中提取前 2 个字符mystring
  4. 索引从零开始,因此它包括第一个、第二个元素,但不包括第三个元素。

2. 查找字符串的最后两个字符

mystring[-2:]

上面的命令返回p?-2开始从倒数第二个位置到字符串最大长度的范围。

3. 从字符串中间查找字符

mystring[1:3]

Out[1]: 'ey'

mystring[1:3]返回第二个和第三个字符。1指第二个字符,因为索引从 0 开始。

4. 如何反转字符串?

mystring[::-1]

Out[1]: '?pussaw ,yddub yeH'

-1告诉 Python 从末尾开始,并从右到左加 1。

5. 如何从 Pandas DataFrame 中的字符串变量中提取字符?

让我们创建一个假数据框来进行说明。在下面的代码中,我们创建一个名为的数据框df,仅包含 1 个名为var1

import pandas as pd
df = pd.DataFrame({"var1": ["A_2", "B_1", "C_2", "A_2"]})

  var1
0  A_2
1  B_1
2  C_2
3  A_2

为了处理Python Pandas Dataframe中的文本数据,我们可以使用str属性。它可用于切片字符值。

df['var1'].str[0]

在本例中,我们从变量中获取第一个字符var1。请参阅下面所示的输出。

Output
0    A
1    B
2    C
3    A

从字符串中提取单词

假设您需要从字符串中取出单词而不是字符。通常我们将一个空格作为分隔符来从字符串中查找单词。

1. 查找字符串的第一个单词

mystring.split()[0]

Out[1]: 'Hey'

怎么运行的?

  1. split()函数使用空格作为默认分隔符来中断字符串
  2. mystring.split()回报 ['Hey', 'buddy,', 'wassup?']
  3. 0返回第一个项目或单词 Hey

2. 逗号作为单词的分隔符

mystring.split(',')[0]

Out[1]: 'Hey buddy'

3. 如何提取最后一个单词

mystring.split()[-1]

Out[1]: 'wassup?'

4. 如何提取DataFrame中的单词

让我们构建一个由客户姓名组成的虚拟数据框并将其称为变量custname

mydf = pd.DataFrame({"custname": ["Priya_Sehgal", "David_Stevart", "Kasia_Woja", "Sandy_Dave"]})

        custname
0   Priya_Sehgal
1  David_Stevart
2     Kasia_Woja
3     Sandy_Dave

#First Word
mydf['fname'] = mydf['custname'].str.split('_').str[0]

#Last Word
mydf['lname'] = mydf['custname'].str.split('_').str[1]

详细说明

Output
        custname  fname    lname
0   Priya_Sehgal  Priya   Sehgal
1  David_Stevart  David  Stevart
2     Kasia_Woja  Kasia     Woja
3     Sandy_Dave  Sandy     Dave

  1. str.split( )类似于split( ). 它用于激活Python中pandas数据框的分割功能。
  2. 在上面的代码中,我们创建了两个新列,名为fnamelname存储名字和姓氏。

Pandas DataFrame 中的 SQL LIKE 运算符

在 SQL 中,LIKE 语句用于查找字符串是否匹配或包含模式。我们可以在 python 中使用str.contains( )function 来实现类似的功能。

df2 = pd.DataFrame({"var1": ["AA_2", "B_1", "C_2", "a_2"],
                    “var2”:[“X_2”,“Y_1”,“Z_2”,“X2”]})

   var1 var2
0  AA_2  X_2
1   B_1  Y_1
2   C_2  Z_2
3   a_2   X2

如何在变量 var1 中查找包含 A 或 B 的行?

df2['var1'].str.contains('A|B')

str.contains(pattern)用于匹配 Pandas Dataframe 中的模式。

Output
0     True
1     True
2    False
3    False

由于函数区分大小写,因此上述命令对第四行返回FALSE 。 为了忽略大小写,我们可以使用case=False参数。请参阅下面的工作示例。

df2['var1'].str.contains('A|B', case=False)

如何过滤包含特定模式的行?

在下面的程序中,我们要求 Python 根据条件对数据进行子集化 - 包含字符值 A 或 B。它相当于 SQL 中的 WHERE 关键字。

df2[df2['var1'].str.contains('A|B', case=False)]

Output 
 var1 var2
0  AA_2  X_2
1   B_1  Y_1
3   a_2   X2

假设您只需要那些字母后跟“_”的值

df2[df2['var1'].str.contains('^[AZ]_', case=False)]

^是正则表达式的标记,表示以特定项目开始。

  var1 var2
1  B_1  Y_1
2  C_2  Z_2
3  a_2   X2

查找特定字符或关键字的位置

str.find(pattern)用于查找子字符串的位置。在本例中,子字符串是“_”。

df2['var1'].str.find('_')

0 2
1 1
2 1
3 1

替换子串

str.replace(old_text,new_text,case=False)用于用一些新值或模式替换特定字符或模式。在下面的代码中,我们将变量 var1 中的 _ 替换为 -- 。

df2['var1'].str.replace('_', '--', case=False)

Output
0    AA--2
1     B--1
2     C--2
3     A--2

我们还可以像下面的程序一样复杂的模式。+表示某项出现一次或多次。在这种情况下,字母表出现 1 次或多次。

df2['var1'].str.replace('[AZ]+_', 'X', case=False)

0 X2
1 X1
2 X2
3 X2

查找字符串的长度

len(string)用于计算字符串的长度。在 pandas 数据框中,您可以申请str.len()相同的。

df2['var1'].str.len()

Output
0    4
1    3
2    3
3    3

要查找特定字符的出现次数(例如,每行中出现“A”的次数),您可以使用str.count(pattern)function.

df2['var1'].str.count('A')

转换为小写和大写

#Convert to lower case
mydf['custname'].str.lower()

#Convert to upper case
mydf['custname'].str.upper()

删除前导和尾随空格

  1. 1、str.strip()删除前导和尾随空格。
  2. 2、str.lstrip()删除前导空格(在开头)。
  3. 3、str.rstrip()删除尾随空格(在末尾)。
df1 = pd.DataFrame({'y1': [' jack', 'jill ', ' jesse ', 'frank ']})
df1['both']=df1['y1'].str.strip()
df1['left']=df1['y1'].str.lstrip()
df1['right']=df1['y1'].str.rstrip()

        y1   both    left   right
0     jack   jack    jack    jack
1    jill    jill   jill     jill
2   jesse   jesse  jesse    jesse
3   frank   frank  frank    frank

将数字转换为字符串

通过使用str( )函数,您可以将数值转换为字符串。

myvariable = 4
mystr = str(myvariable)

连接或连接字符串

只需使用+,您就可以连接两个字符串值。

x = "Deepanshu"
y ="Bhalla"
x+y

DeepanshuBhalla

如果您想在两个字符串之间添加空格,可以使用 - x+' '+yreturnsDeepanshu Bhalla 假设您有一个包含多个字符串值的列表,并且您想要将它们组合起来。您可以使用join( ) 函数。

string0 = ['Ram', 'Kumar', 'Singh']
' '.join(string0)

Output
'Ram Kumar Singh'

假设您想要组合或连接 pandas 数据框的两列。

mydf['fullname'] = mydf['fname'] + ' ' + mydf['lname']

或者

mydf['fullname'] = mydf[['fname', 'lname']].apply(lambda x: ' '.join(x), axis=1)

     custname  fname    lname       fullname
0   Priya_Sehgal  Priya   Sehgal   Priya Sehgal
1  David_Stevart  David  Stevart  David Stevart
2     Kasia_Woja  Kasia     Woja     Kasia Woja
3     Sandy_Dave  Sandy     Dave     Sandy Dave

Pandas 中的 SQL IN 运算符

我们可以使用isin(list)函数在过滤或子集标准中包含多个值。

mydata = pd.DataFrame({'product': ['A', 'B', 'B', 'C','C','D','A']})
mydata[mydata['product'].isin(['A', 'B'])]

  product
0       A
1       B
2       B
6       A

如何在选择多个值时应用 NOT 条件?

我们可以使用sign~告诉python否定条件。

mydata[~mydata['product'].isin(['A', 'B'])]

从字符串中提取特定模式

str.extract(r'regex-pattern')用于此任务。

df2['var1'].str.extract(r'(^[A-Z]_)')

r'(^[A-Z]_)'表示以 AZ 开头,后跟“_”

0    NaN
1     B_
2     C_
3    NaN

为了删除缺失值,我们可以使用dropna( )函数。

df2['var1'].str.extract(r'(^[AZ]_)').dropna()