Python酷库之旅-第三方库Pandas(078)
目录
一、用法精讲
321、pandas.Series.str.len方法
321-1、语法
321-2、参数
321-3、功能
321-4、返回值
321-5、说明
321-6、用法
321-6-1、数据准备
321-6-2、代码示例
321-6-3、结果输出
322、pandas.Series.str.ljust方法
322-1、语法
322-2、参数
322-3、功能
322-4、返回值
322-5、说明
322-6、用法
322-6-1、数据准备
322-6-2、代码示例
322-6-3、结果输出
323、pandas.Series.str.lower方法
323-1、语法
323-2、参数
323-3、功能
323-4、返回值
323-5、说明
323-6、用法
323-6-1、数据准备
323-6-2、代码示例
323-6-3、结果输出
324、pandas.Series.str.lstrip方法
324-1、语法
324-2、参数
324-3、功能
324-4、返回值
324-5、说明
324-6、用法
324-6-1、数据准备
324-6-2、代码示例
324-6-3、结果输出
325、pandas.Series.str.match方法
325-1、语法
325-2、参数
325-3、功能
325-4、返回值
325-5、说明
325-6、用法
325-6-1、数据准备
325-6-2、代码示例
325-6-3、结果输出
一、用法精讲
321、pandas.Series.str.len方法
321-1、语法
# 321、pandas.Series.str.len方法
pandas.Series.str.len()
Compute the length of each element in the Series/Index.The element may be a sequence (such as a string, tuple or list) or a collection (such as a dictionary).Returns:
Series or Index of int
A Series or Index of integer values indicating the length of each element in the Series or Index.
321-2、参数
无
321-3、功能
用于pandas.Series对象中的字符串数据,返回每个字符串的字符数,如果某个元素不是字符串类型,如为NaN或其他类型,将返回NaN。
321-4、返回值
返回一个pandas.Series对象,其中包含每个元素的长度,如果原始元素为NaN或非字符串类型,则相应的位置将会是NaN。
321-5、说明
使用场景:
321-5-1、数据清理: 在对数据进行清理和预处理时,可能需要检查字符串的长度,以便识别异常值或不符合特定规则的数据。例如,过滤出长度小于某个值的字符串。
321-5-2、特征工程: 在机器学习中,可以将字符串长度作为特征之一,与其他特征一起用于模型训练。例如,文本分类任务中,文本的长度可能与类别有一定的关联。
321-5-3、文本分析: 在进行文本分析时,字符串长度可能提供有用的信息。例如,分析评论或反馈的长度,评估用户的参与度。
321-5-4、数据完整性检查: 通过检查字符串长度,可以确保数据的完整性。例如,某些字段在数据库中要求有特定的字符长度,通过长度检查可以发现缺失或异常的数据。
321-5-5、聚合和统计: 有时需要对字符串长度进行统计,比如计算平均长度、最大长度或最小长度等,以获得数据集的整体特性。
321-5-6、可视化准备: 当准备数据进行可视化时,字符串长度可以作为一个维度来探索数据分布,帮助选择合适的图表展示方式。
321-6、用法
321-6-1、数据准备
无
321-6-2、代码示例
# 321、pandas.Series.str.len方法
# 321-1、数据清理
import pandas as pd
# 创建示例数据
data = {'text': ['hello', 'world', 'Pandas', '', 'Python programming', 'AI assistant']}
df = pd.DataFrame(data)
# 过滤出长度小于等于2的字符串
filtered_df = df[df['text'].str.len() <= 8]
print("过滤后的数据:")
print(filtered_df, end='\n\n')# 321-2、特征工程
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
# 创建示例数据
data = {'text': ['short', 'a bit longer', 'this is a longer text', 'tiny', 'lengthy sentence'],'label': [0, 1, 1, 0, 1]
}
df = pd.DataFrame(data)
# 提取字符串长度作为特征
df['text_length'] = df['text'].str.len()
# 划分数据集
X = df[['text_length']]
y = df['label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = RandomForestClassifier()
model.fit(X_train, y_train)
# 输出测试集预测结果
predictions = model.predict(X_test)
print("预测结果:", predictions, end='\n\n')# 321-3、文本分析
import pandas as pd
# 创建示例评论数据
comments = {'viewer': ['User1', 'User2', 'User3', 'User4'],'comment': ['Great movie!', 'Very boring.', 'I loved it!', 'Not my taste at all.']
}
df = pd.DataFrame(comments)
# 计算每个评论的长度
df['comment_length'] = df['comment'].str.len()
print("评论长度分析:")
print(df[['viewer', 'comment', 'comment_length']], end='\n\n')# 321-4、数据完整性检查
import pandas as pd
# 创建示例数据
data = {'username': ['myelsa', 'bob', 'charlie', 'david', 'eve', None]}
df = pd.DataFrame(data)
# 检查用户名长度,找到空值或长度为0的用户名
invalid_usernames = df[df['username'].isnull() | (df['username'].str.len() == 0)]
print("无效用户名:")
print(invalid_usernames, end='\n\n')# 321-5、聚合和统计
import pandas as pd
# 创建示例数据
data = {'text': ['apple', 'banana', 'kiwi', 'blueberry', 'mango']}
df = pd.DataFrame(data)
# 计算字符串长度及其统计信息
lengths = df['text'].str.len()
print("字符串长度统计:")
print("最小长度:", lengths.min())
print("最大长度:", lengths.max())
print("平均长度:", lengths.mean(), end='\n\n')# 321-6、可视化准备
import pandas as pd
import matplotlib.pyplot as plt
# 创建示例数据
data = {'text': ['apple', 'banana', 'kiwi', 'blueberry', 'mango']}
df = pd.DataFrame(data)
# 计算字符串长度
df['text_length'] = df['text'].str.len()
counts, bins, patches = plt.hist(df['text_length'], bins=range(1, 11), align='left', edgecolor='black', color = 'red')
# 添加数据标签
for count, x in zip(counts, bins[:-1]):plt.text(x + 0.2, count, str(int(count)), ha='center', va='bottom', fontweight = 'bold', color = 'purple') # 显示频率标签
plt.title('String Length Distribution')
plt.xlabel('Length of String')
plt.ylabel('Frequency')
plt.xticks(range(1, 10))
plt.grid(axis='y', alpha=0.75)
plt.show()
321-6-3、结果输出
# 321、pandas.Series.str.len方法
# 321-1、数据清理
# 过滤后的数据:
# text
# 0 hello
# 1 world
# 2 Pandas
# 3# 321-2、特征工程
# 预测结果: [1]# 321-3、文本分析
# 评论长度分析:
# viewer comment comment_length
# 0 User1 Great movie! 12
# 1 User2 Very boring. 12
# 2 User3 I loved it! 11
# 3 User4 Not my taste at all. 20# 321-4、数据完整性检查
# 无效用户名:
# username
# 5 None# 321-5、聚合和统计
# 字符串长度统计:
# 最小长度: 4
# 最大长度: 9
# 平均长度: 5.8# 321-6、可视化准备
# 见图1
图1:
322、pandas.Series.str.ljust方法
322-1、语法
# 322、pandas.Series.str.ljust方法
pandas.Series.str.ljust(width, fillchar=' ')
Pad right side of strings in the Series/Index.Equivalent to str.ljust().Parameters:
width
int
Minimum width of resulting string; additional characters will be filled with fillchar.fillchar
str
Additional character for filling, default is whitespace.Returns:
Series/Index of objects.
322-2、参数
322-2-1、width(必须):整数,指定输出字符串的最小宽度,如果原字符串的长度小于这个宽度,则会在字符串的右侧填充fillchar以达到指定宽度;如果原字符串的长度大于或等于宽度,则原字符串不变。
322-2-2、fillchar(可选,默认值为' '):字符串,指定用来填充的字符。如果指定的字符长度不为1,则会引发错误。
322-3、功能
用于将字符串左对齐,它为每个字符串提供了一种方式,以确保它们的长度一致,方便在表格或其他显示情况下进行排列,这在处理文本数据时尤其有用。
322-4、返回值
返回一个Series,其中每个字符串都经过格式化处理,如果Series中的某些值为NaN,则这些值将保持不变。
322-5、说明
使用场景:
322-5-1、文本格式化:在生成报告或输出数据时,需要确保字符串的宽度一致,以提升可读性,通过左对齐和填充,可以使数据呈现得更加整齐。
322-5-2、对齐数据:当需要将字符串数据放入表格或屏幕输出时,对齐数据有助于更好地进行视觉比较。例如,在命令行界面中,由于空格未对齐可能造成数据误读,使用ljust()方法可以确保每列数据按相同宽度排列。
322-5-3、生成对齐的文本数据:在创建文本文件(如CSV或TXT)时,确保每个字段的长度一致有助于后续处理或解析,这在处理日志文件或生成可人读的输出时尤其重要。
322-5-4、数据清洗和准备:在数据预处理过程中,可能需要将不同长度的字符串标准化到一定的宽度,以便在后续分析中避免误差。
322-5-5、用户输入处理:当需要接收用户的输入并标准化其格式时,可以使用此方法将输入的字符串调整到特定格式。
322-5-6、图形用户界面的数据展示:在开发图形用户界面时,左对齐字符串有助于创建更加一致和美观的用户界面。
322-6、用法
322-6-1、数据准备
无
322-6-2、代码示例
# 322、pandas.Series.str.ljust方法
# 322-1、文本格式化
import pandas as pd
data = pd.Series(['apple', 'banana', 'cherry'])
formatted_data = data.str.ljust(10,'*') # 将每个字符串左对齐填充到10个字符宽度
print(formatted_data, end='\n\n')# 322-2、对齐数据
import pandas as pd
data = pd.Series(['Name', 'Myelsa', 'Bob', 'Charlie'])
width = 10
aligned_data = data.str.ljust(width)
print(aligned_data, end='\n\n')# 322-3、生成对齐的文本数据(写入文件)
import pandas as pd
data = pd.Series(['ID', 'Name', 'Age'])
width = 20
# 创建并写入文件
with open('output.txt', 'w') as f:for item in data.str.ljust(width):f.write(item + '\n')
print("文件'output.txt'已创建,内容已左对齐!", end='\n\n')# 322-4、数据清洗和准备
import pandas as pd
data = pd.Series(['apple', 'kiwi', 'banana', None, 'orange'])
# 左对齐并填充空值,设置占位符为 '-'
cleaned_data = data.str.ljust(10, '-')
print(cleaned_data, end='\n\n')# 322-5、用户输入处理
import pandas as pd
# 模拟用户输入
user_inputs = pd.Series(['User1', 'User2', 'User3'])
# 左对齐,确保每个用户名都有相同的宽度
aligned_inputs = user_inputs.str.ljust(15)
print("对齐后的用户输入:")
print(aligned_inputs, end='\n\n')# 322-6、图形用户界面的数据展示(示例框架)
import tkinter as tk
import pandas as pd
def display_data(data):width = 20formatted_data = data.str.ljust(width)for item in formatted_data:label = tk.Label(root, text=item)label.pack()
if __name__ == "__main__":root = tk.Tk()root.title("对齐数据展示")data = pd.Series(['Item1', 'Item2', 'Item3'])display_data(data)root.mainloop()
322-6-3、结果输出
# 322、pandas.Series.str.ljust方法
# 322-1、文本格式化
# 0 apple*****
# 1 banana****
# 2 cherry****
# dtype: object# 322-2、对齐数据
# 0 Name
# 1 Myelsa
# 2 Bob
# 3 Charlie
# dtype: object# 322-3、生成对齐的文本数据(写入文件)
# 文件'output.txt'已创建,内容已左对齐!# 322-4、数据清洗和准备
# 0 apple-----
# 1 kiwi------
# 2 banana----
# 3 None
# 4 orange----
# dtype: object# 322-5、用户输入处理
# 对齐后的用户输入:
# 0 User1
# 1 User2
# 2 User3
# dtype: object# 322-6、图形用户界面的数据展示(示例框架)
# 见图2
图2:
323、pandas.Series.str.lower方法
323-1、语法
# 323、pandas.Series.str.lower方法
pandas.Series.str.lower()
Convert strings in the Series/Index to lowercase.Equivalent to str.lower().Returns:
Series or Index of object.
323-2、参数
无
323-3、功能
遍历Series中的每个字符串,并将其中的所有大写字母转换为小写字母。例如,'Hello'将被转换为'hello'。
323-4、返回值
返回一个新的Series,其中包含了转换为小写字母的字符串,与原系列的索引相同。
323-5、说明
使用场景:
323-5-1、数据清洗:在数据分析之前,通常需要对文本数据进行清洗,以确保一致性,使用该方法可以将所有字符串转换为小写,避免因为大小写不一致导致的问题。
323-5-2、文本比较:在进行字符串比较时,大小写可能会影响结果,将字符串统一为小写后,可以可靠地进行相等性比较,比如在查找或过滤数据时。
323-5-3、数据标准化:在数据合并、联接或去重时,确保字符串的大小写一致性是很重要的,使用该方法可以帮助实现标准化,确保更准确的结果。
323-5-4、自然语言处理:在自然语言处理(NLP)的任务中,将文本转换为小写是一个常见的预处理步骤,提高模型的表现并减少特征空间的复杂性。
323-5-5、用户输入处理:在处理用户输入时,尤其是搜索功能,转换为小写可以确保用户输入和数据库中的数据比较时不会因为大小写不同而漏掉匹配项。
323-5-6、日志分析:在分析日志文件时,通常需要对日志信息进行统一处理,以确保分析结果的准确性和可读性。
323-6、用法
323-6-1、数据准备
无
323-6-2、代码示例
# 323、pandas.Series.str.lower方法
import pandas as pd
# 创建一个包含字符串的Series
data = pd.Series(['Hello', 'World', 'Python', 'PANDAS'])
# 使用str.lower()方法
lowercase_data = data.str.lower()
print(lowercase_data)
323-6-3、结果输出
# 323、pandas.Series.str.lower方法
# 0 hello
# 1 world
# 2 python
# 3 pandas
# dtype: object
324、pandas.Series.str.lstrip方法
324-1、语法
# 324、pandas.Series.str.lstrip方法
pandas.Series.str.lstrip(to_strip=None)
Remove leading characters.Strip whitespaces (including newlines) or a set of specified characters from each string in the Series/Index from left side. Replaces any non-strings in Series with NaNs. Equivalent to str.lstrip().Parameters:
to_strip
str or None, default None
Specifying the set of characters to be removed. All combinations of this set of characters will be stripped. If None then whitespaces are removed.Returns:
Series or Index of object.
324-2、参数
324-2-1、to_strip(可选,默认值为None):一个字符串,表示希望从每个字符串的左侧去除的字符集合,如果未提供该参数,则默认去除字符串左侧的空白字符(包括空格、制表符、换行符等)。
324-3、功能
从每个字符串的开头移除指定的字符。它常用于清理数据,确保字符串格式的一致性。比如,如果某些字符串的左侧有多余的空格或特定的字符,可以使用此方法将其移除。
324-4、返回值
返回一个新的Series对象,包含经过左侧字符去除处理后的所有字符串,原始数据不会被修改。
324-5、说明
无
324-6、用法
324-6-1、数据准备
无
324-6-2、代码示例
# 324、pandas.Series.str.lstrip方法
import pandas as pd
# 创建一个字符串序列
s = pd.Series([' apple', ' banana', 'cherry ', ' date'])
# 使用lstrip去除左侧的空白字符
cleaned_s = s.str.lstrip()
print(cleaned_s)
324-6-3、结果输出
# 324、pandas.Series.str.lstrip方法
# 0 apple
# 1 banana
# 2 cherry
# 3 date
# dtype: object
325、pandas.Series.str.match方法
325-1、语法
# 325、pandas.Series.str.match方法
pandas.Series.str.match(pat, case=True, flags=0, na=None)
Determine if each string starts with a match of a regular expression.Parameters:
pat
str
Character sequence.case
bool, default True
If True, case sensitive.flags
int, default 0 (no flags)
Regex module flags, e.g. re.IGNORECASE.na
scalar, optional
Fill value for missing values. The default depends on dtype of the array. For object-dtype, numpy.nan is used. For StringDtype, pandas.NA is used.Returns:
Series/Index/array of boolean values.
325-2、参数
325-2-1、pat(必须):一个字符串或者正则表达式,用于匹配数据中的每个字符串。
325-2-2、case(可选,默认值为True):如果为True,则匹配时区分大小写;如果为False,则不区分大小写。
325-2-3、flags(可选,默认值为0):一个标志位,用于修改正则表达式的行为,可以使用re模块中的标志,如re.IGNORECASE等,例如,可以通过设置这个参数来实现不区分大小写的匹配。
325-2-4、na(可选,默认值为None):用于指定当字符串为缺失值(NaN)时的返回值,如果未指定,则默认返回None。
325-3、功能
检查每个字符串是否从开头开始符合指定的正则表达式模式,这可以用于数据清理和验证,帮助识别符合特定条件的字符串。
325-4、返回值
返回一个布尔型Series对象,表示每个字符串是否匹配指定的模式,与原始字符串系列具有相同的索引。
325-5、说明
无
325-6、用法
325-6-1、数据准备
无
325-6-2、代码示例
# 325、pandas.Series.str.match方法
# 325-1、基本用法
import pandas as pd
# 创建一个字符串序列
s = pd.Series(['apple', 'banana', 'cherry', 'date'])
# 使用str.match方法检查是否以字母'a'开头
match_result = s.str.match('a')
print(match_result, end='\n\n')# 325-2、使用大小写不敏感匹配
import pandas as pd
# 创建一个字符串序列
s2 = pd.Series(['Apple', 'banana', 'Cherry', 'date'])
# 使用str.match方法检查是否以字母'a'开头,不区分大小写
match_case_insensitive = s2.str.match('a', case=False)
print(match_case_insensitive, end='\n\n')# 325-3、使用正则表达式匹配
import pandas as pd
# 创建一个字符串序列
s3 = pd.Series(['hello123', 'hi456', 'hey789', 'hello_world'])
# 使用 str.match 方法检查是否以 'hello' 开头
match_regex = s3.str.match('hello')
print(match_regex)
325-6-3、结果输出
# 325、pandas.Series.str.match方法
# 325-1、基本用法
# 0 True
# 1 False
# 2 False
# 3 False
# dtype: bool# 325-2、使用大小写不敏感匹配
# 0 True
# 1 False
# 2 False
# 3 False
# dtype: bool# 325-3、使用正则表达式匹配
# 0 True
# 1 False
# 2 False
# 3 True
# dtype: bool