Pandas处理文本数据
Pandas中的Series和Indexs配备了一组字符串的处理方法,这些方法可以轻松地对数组的每个元素进行操作。下面从以下几点说起。
一、大小写转换
小写数据使用了方法str.lower(),该函数将所有大写字符转换为小写。如果不存在大写字符,则返回原始字符串。对于大写数据,使用str.upper()这个函数将所有小写字符转换为大写。如果不存在小写字符,则返回原始字符串。
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']} df = pd.DataFrame(data) df["Name"]= df["Name"].str.lower()
print(df)
import pandas as pd data = pd.read_csv("nba.csv") data["Team"]= data["Team"].str.upper() data
二、拆分和替换数据
为了分割数据,我们使用方法str.split(),这个函数在通过指定的分隔符将给定的字符串分隔开之后返回了一个字符串列表,但是它只能应用于单个字符串。此外,pandas 中的str.split()
方法可以应用于整个系列中,每次调用此方法前都必须给.str加上前缀,以区别于Python中的默认的函数,否则,它将引发错误。
为了替换数据,我们使用方法str.replace(),这个函数就像Python 方法一样的工作,但是它也可以在Series上工作。在调用Pandas系列之前,必须为.str加上前缀,以使其与Python的默认replace方法区分开。
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']} df = pd.DataFrame(data) df.dropna(inplace = True) df["Address"]= df["Address"].str.split("a", n = 1, expand = True) print(df)
import pandas as pd data = pd.read_csv("nba.csv") data["Age"]= data["Age"].replace(25.0, "Twenty five") filter = data["Age"]=="Twenty five" data.where(filter).dropna()
三、数据串联
为了连接一个Series或Index,我们使用str.cat()这个函数用于将字符串连接到传递的调用者字符串系列。可以传递来自不同系列的不同值,但是两个系列的长度必须相同,必须为.str加上前缀,以区别于Python的默认方法。
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']} df = pd.DataFrame(data) new = df["Address"].copy() df["Name"]= df["Name"].str.cat(new, sep =", ") print(df)
import pandas as pd 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函数。
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']} 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 ")
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填充的行。
import pandas as pd s = pd.Series(['a1', 'b2', 'c3']) n= s.str.extract(r'([ab])(\d)') print(n)
import pandas as pd s = pd.Series(['a1', 'b2', 'c3']) n = s.str.extract(r'(?P<Geeks>[ab])(?P<For>\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() | 交换系列中每个字符串的大小写的方法 |