Python | Pandas 处理文本数据
Series 和 Indexes 配备了一组字符串处理方法,可以轻松对数组的每个元素进行操作。也许最重要的是,这些方法会自动排除缺失/NA 值。这些方法可通过 str 属性访问,并且通常具有与等效(标量)内置字符串方法匹配的名称。
将数据转换为小写和大写
为了将数据转换为小写,我们使用 str.lower(), 该函数将所有大写字符转换为小写。如果不存在大写字符,则返回原始字符串。为了将数据转换为大写,我们使用 str.upper(), 该函数将所有小写字符转换为大写。如果不存在小写字符,则返回原始字符串。
代码 #1:
Python
# Import pandas package
import pandas as pd
# Define a dictionary containing employee data
data = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
'Age':[27, 24, 22, 32],
'Address':['Delhi', 'Kanpur', 'Allahabad', 'Kannauj'],
'Qualification':['Msc', 'MA', 'MCA', 'Phd']}
# Convert the dictionary into DataFrame
df = pd.DataFrame(data)
# converting and overwriting values in column
df["Name"]= df["Name"].str.lower()
print(df)
输出:
如数据框的输出图像所示,名称列中的所有值都已转换为小写。
在这个例子中,我们使用 文件。nba.csv
代码 #2:
Python
# importing pandas package
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv")
# converting and overwriting values in column
data["Team"]= data["Team"].str.upper()
# display
data
输出:
如数据框输出图像所示,Team 列中的所有值都已转换为大写。
拆分和替换数据
为了分割数据,我们使用 str.split(), 该函数在用指定的分隔符分隔给定的字符串后返回一个字符串列表,但它只能应用于单个字符串。Pandas str.split() 方法可以应用于整个系列。 每次调用此方法之前都必须加上.str 前缀,以将其与 Python 的默认函数区分开来,否则将引发错误。为了替换数据,我们使用 str.replace(), 该函数仅像 Python 方法一样工作,但它也适用于 Series。在调用 Pandas 系列 之前 ,必须加上.str 前缀,以将其与 Python 的默认替换方法区分开来。 .replace().replace()
代码 #1:
Python
# importing pandas module
import pandas as pd
# Define a dictionary containing employee data
data = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
'Age':[27, 24, 22, 32],
'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Knnuaj'],
'Qualification':['Msc', 'MA', 'MCA', 'Phd']}
# Convert the dictionary into DataFrame
df = pd.DataFrame(data)
# dropping null value columns to avoid errors
df.dropna(inplace = True)
# new data frame with split value columns
df["Address"]= df["Address"].str.split("a", n = 1, expand = True)
# df display
print(df)
输出 :
如输出图像所示,地址列在第一次出现“a”时被分隔,而没有在后面出现时被分隔,因为 n 参数设置为 1(字符串中最多 1 个分隔符)。
代码 #2:
Python
# importing pandas module
import pandas as pd
# reading csv file from url
data = pd.read_csv("nba.csv")
# overwriting column with replaced value of age
data["Age"]= data["Age"].replace(25.0, "Twenty five")
# creating a filter for age column
# where age = "Twenty five"
filter = data["Age"]=="Twenty five"
# printing only filtered columns
data.where(filter).dropna()
输出:
如输出图所示,Age 列中所有 age=25.0 的值都已被“Twenty five”替换。
数据连接
为了连接一个系列或索引,我们使用 str.cat(), 此函数用于将字符串连接到传递的调用者字符串系列。可以传递来自不同系列的不同值,但两个系列的长度必须相同。必须添加 .str 前缀以将其与 Python 的默认方法区分开来。
代码 #1:
Python
# importing pandas module
import pandas as pd
# Define a dictionary containing employee data
data = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
'Age':[27, 24, 22, 32],
'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'],
'Qualification':['Msc', 'MA', 'MCA', 'Phd']}
# Convert the dictionary into DataFrame
df = pd.DataFrame(data)
# making copy of address column
new = df["Address"].copy()
# concatenating address with name column
# overwriting name column
df["Name"]= df["Name"].str.cat(new, sep =", ")
# display
print(df)
输出 :
如输出图所示,Address 列中每个与 Name 列中的字符串具有相同索引的字符串都已用分隔符连接起来 “, “。
代码 #2:
Python
# importing pandas module
import pandas as pd
# importing csv from link
data = pd.read_csv("nba.csv")
# making copy of team column
new = data["Team"].copy()
# concatenating team with name column
# overwriting name column
data["Name"]= data["Name"].str.cat(new, sep =", ")
# display
data
输出:
如输出图所示,Team 列中每个与 Name 列中的字符串具有相同索引的字符串都用分隔符“, ”连接起来。
删除数据中的空格
为了删除空格,我们使用 str.strip()、 str.rstrip()、 str.lstrip() 这些函数来处理任何文本数据中的空格(包括换行符)。从名称可以看出,str.lstrip() 用于从字符串左侧删除空格,str.rstrip() 用于从字符串右侧删除空格,str.strip() 用于从两侧删除空格。由于这些是与 Python 默认函数同名的 pandas 函数,因此必须加上 .str 前缀以告诉编译器正在调用 Pandas 函数。
代码 #1:
Python
# importing pandas module
import pandas as pd
# Define a dictionary containing employee data
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']}
# Convert the dictionary into DataFrame
df = pd.DataFrame(data)
# replacing address name and adding spaces in start and end
new = df["Address"].replace("Nagpur junction", " Nagpur junction ").copy()
# checking with custom string
print(new.str.strip()==" Nagpur junction")
print(new.str.strip()=="Nagpur junction ")
print(new.str.strip()==" Nagpur junction ")
输出:
如输出图所示,比较对所有 3 个条件都返回 False,这意味着成功从两侧删除空格,并且字符串不再有空格。
代码 #2:
Python
# importing pandas module
import pandas as pd
# making data frame
data = pd.read_csv("nba.csv")
# replacing team name and adding spaces in start and end
new = data["Team"].replace("Boston Celtics", " Boston Celtics ").copy()
# checking with custom removed space string
new.str.lstrip()=="Boston Celtics "
输出 :
如输出图像所示,删除左侧空格后比较结果为真。
提取数据
为了提取数据,我们使用 str.extract(),此函数接受至少包含一个捕获组的正则表达式。提取包含多个组的正则表达式将返回一个 DataFrame,每个组有一列。不匹配的元素将返回一行,填充为 NaN。
代码 #1:
Python
# importing pandas module
import pandas as pd
# creating a series
s = pd.Series(['a1', 'b2', 'c3'])
# Extracting a data
n= s.str.extract(r'([ab])(\d)')
print(n)
输出:
如输出图所示,这两个组将返回一个包含两列的 DataFrame。不匹配将为 NaN。
代码 #2:
Python
# importing pandas module
import pandas as pd
# creating a series
s = pd.Series(['a1', 'b2', 'c3'])
# Extracting a data
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() | 交换一系列字符串中每个字符串的大小写的方法 |