📅  最后修改于: 2020-04-20 13:44:43             🧑  作者: Mango
系列和索引配备了一组字符串处理方法,这些方法使操作数组中的每个元素变得容易。也许最重要的是,这些方法会自动排除丢失/ NA值。这些可以通过str属性访问,并且通常具有与等效的(标量)内置字符串方法匹配的名称。
为了小写数据,我们使用str.lower()这个函数将所有大写字符转换为小写。如果不存在大写字符,则返回原始字符串。为了大写数据,我们使用str.upper()这个函数将所有小写字符转换为大写。如果不存在小写字符,则返回原始字符串。
代码1:
# 导入pandas
import pandas as pd
# 定义包含员工数据的字典
data = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
'Age':[27, 24, 22, 32],
'Address':['Delhi', 'Kanpur', 'Allahabad', 'Kannauj'],
'Qualification':['Msc', 'MA', 'MCA', 'Phd']}
# 将字典转换为DataFrame
df = pd.DataFrame(data)
# 转换和覆盖列中的值
df["Name"]= df["Name"].str.lower()
print(df)
输出:
如数据帧的输出图像所示,名称列中的所有值均已转换为小写。
在此示例中,我们使用nba.csv
文件。
代码2
# 导入pandas
import pandas as pd
# 从csv文件制作数据帧
data = pd.read_csv("nba.csv")
# 转换和覆盖列中的值
data["Team"]= data["Team"].str.upper()
# display
data
输出:
如数据帧的输出图像所示,“team”列中的所有值均已转换为大写。
为了分割数据,我们使用str.split()这个函数,通过指定的分隔符将给定的字符串分隔开之后返回一个字符串列表,但是它只能应用于单个字符串。str.split()
方法可以应用于整个系列。每次都必须在.str前面加上前缀,才能调用此方法以将其与Python的默认函数区分开,否则,它将引发错误。为了替换数据,我们使用str.replace()这个函数仅像Python 方法一样工作,但是它也可以在Series上工作。在调用Pandas系列之前,必须为.str加上前缀,以便将其与Python的默认replace方法区分开。
代码#1 .replace()
.replace()
# 导入pandas
import pandas as pd
# 定义包含员工数据的字典
data = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
'Age':[27, 24, 22, 32],
'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Knnuaj'],
'Qualification':['Msc', 'MA', 'MCA', 'Phd']}
# 将字典转换为DataFrame
df = pd.DataFrame(data)
# 删除空值列以避免错误
df.dropna(inplace = True)
# 具有拆分值的新数据框
df["Address"]= df["Address"].str.split("a", n = 1, expand = True)
# df display
print(df)
输出:
如输出图像中所示,由于n参数设置为1(字符串中最大间隔为1),所以地址列在第一次出现“ a”而不是在以后出现时被分隔。
代码2:
# 导入pandas
import pandas as pd
# 从网址读取csv文件
data = pd.read_csv("nba.csv")
# 覆盖年龄替换值的列
data["Age"]= data["Age"].replace(25.0, "Twenty five")
# 为年龄列创建过滤器
# age = "Twenty five"
filter = data["Age"]=="Twenty five"
# 仅打印过滤的列
data.where(filter).dropna()
输出:
如输出图像所示,“age”列中所有年龄为25.0的值已被替换为“二十五”。
为了连接一个Series或Index,我们使用str.cat()这个函数用于将字符串连接到传递的调用者字符串系列。可以传递来自不同系列的不同值,但是两个系列的长度必须相同。必须为.str加上前缀,以使其与Python的默认方法区分开。
代码1:
# 导入pandas
import pandas as pd
# 定义包含员工数据的字典
data = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
'Age':[27, 24, 22, 32],
'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'],
'Qualification':['Msc', 'MA', 'MCA', 'Phd']}
# 将字典转换为DataFrame
df = pd.DataFrame(data)
# 复制地址栏
new = df["Address"].copy()
# 将地址与名称列连接在一起覆盖名称列
df["Name"]= df["Name"].str.cat(new, sep =", ")
# 打印
print(df)
输出:
如输出图像中所示,“address”列中与“name”列中的索引相同的每个字符串都已用“分隔符“, “
“连接起来。
代码2:
# 导入pandas
import pandas as pd
# 从链接导入csv
data = pd.read_csv("nba.csv")
# 复制
new = data["Team"].copy()
# 连接名称列的团队覆盖名称列
data["Name"]= data["Name"].str.cat(new, sep =", ")
# 打印
data
输出:
如输出图像所示,“团队”列中与“名称”列中的索引相同的每个字符串都已用分隔符“,”连接起来。
为了删除空格,我们使用str.strip(),str.rstrip()和str.lstrip()这些函数来处理任何文本数据中的空格(包括换行)。从名称中可以看出,str.lstrip()用于删除字符串左侧的空格,str.rstrip()用于删除字符串右侧的空格,而str.strip()则同时删除字符串的空格双方。由于这些是与Python的默认函数同名的pandas函数,因此必须在前缀.str之前告知编译器正在调用Pandas函数。
代码1:
# 导入pandas
import pandas as pd
# 定义包含员工数据的字典
data = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
'Age':[27, 24, 22, 32],
'Address':['Nagpur junction', 'Kanpur junction',
'Nagpur junction', 'Kannuaj junction'],
'Qualification':['Msc', 'MA', 'MCA', 'Phd']}
# 将字典转换为DataFrame
df = pd.DataFrame(data)
# 替换地址名称并在开头和结尾添加空格
new = df["Address"].replace("Nagpur junction", " Nagpur junction ").copy()
# 用自定义字符串检查
print(new.str.strip()==" Nagpur junction")
print(new.str.strip()=="Nagpur junction ")
print(new.str.strip()==" Nagpur junction ")
输出:
如输出图像所示,对于所有3个条件,比较均返回False,这意味着空格已成功从两侧移除,并且字符串不再具有空格。
代码2:
# 导入pandas
import pandas as pd
# 制作数据框
data = pd.read_csv("nba.csv")
# 替换团队名称并在开始和结束处添加空格
new = data["Team"].replace("Boston Celtics", " Boston Celtics ").copy()
# 使用自定义删除的空格字符串检查
new.str.lstrip()=="Boston Celtics "
输出:
如输出图像所示,删除左侧空格后,比较为真
为了提取数据,我们使用str.extract()。此函数接受带有至少一个捕获组的正则表达式。提取一组以上的正则表达式将返回一个DataFrame,每组包含一列。不匹配的元素将返回用NaN填充的行。
代码1:
# 导入pandas
import pandas as pd
# 创建一个系列
s = pd.Series(['a1', 'b2', 'c3'])
# 提取数据
n= s.str.extract(r'([ab])(\d)')
print(n)
输出:
如输出图像所示,两组将返回一个具有两列的DataFrame。不匹配项为NaN。
代码2:
# 导入pandas
import pandas as pd
# 创建一个系列
s = pd.Series(['a1', 'b2', 'c3'])
# 提取数据
n = s.str.extract(r'(?P<芒果>[ab])(?P\d)')
print(n)
输出:
如输出图像所示,该命名的组将成为结果中的列名。
Pandas str方法:
函数 | 描述 |
---|---|
str.lower() | 将字符串的字符转换为小写的方法 |
str.upper() | 将字符串的字符转换为大写的方法 |
str.find() | 方法用于搜索序列中存在的每个字符串中的子字符串 |
str.rfind() | 方法用于从右侧搜索系列中存在的每个字符串中的子字符串 |
str.findall() | 方法还用于在系列中的每个字符串中查找子字符串或分隔符 |
str.isalpha() | 方法用于检查序列中每个字符串中的所有字符是否都是字母(az / AZ) |
str.isdecimal() | 方法用于检查字符串中的所有字符是否均为十进制 |
str.title() | 字符串中每个单词的首字母大写的方法 |
str.len() | 方法返回字符串中字符数的计数 |
str.replace() | 方法用用户提供的另一个值替换字符串中的子字符串 |
str.contains() | 方法测试模式或正则表达式是否包含在系列或索引的字符串中 |
str.extract() | 从正则表达式模式的第一个匹配项中提取组。 |
str.startswith() | 方法测试每个字符串元素的开头是否与模式匹配 |
str.endswith() | 方法测试每个字符串元素的末尾是否与模式匹配 |
str.isdigit() | 用于检查序列中每个字符串中的所有字符是否都是数字的方法 |
str.lstrip() | 方法从字符串的左侧(开头)删除空格 |
str.rstrip() | 方法从字符串的右侧(结尾)删除空格 |
str.strip() | 从字符串中删除开头和结尾空格的方法 |
str.split() | 方法根据用户指定的值的出现来拆分字符串值 |
str.join() | 方法用于通过传递的定界符连接列表中存在的列表中的所有元素 |
str.cat() | 方法用于将字符串连接到传递的调用方字符串系列。 |
str.repeat() | 方法用于在传递的序列本身的相同位置重复字符串值 |
str.get() | 方法用于获取通过位置的元素 |
str.partition() | 与str.split()不同,该方法仅在第一次出现时才拆分字符串 |
str.rpartition() | 方法仅将字符串分割一次,并且反向分割。它的工作方式类似于str.partition()和str.split() |
str.pad() | 将填充(空格或其他字符)添加到系列中的每个字符串元素的方法 |
str.swapcase() | 交换系列中每个字符串的大小写的方法 |