Python酷库之旅-第三方库Pandas(077)

目录

一、用法精讲

316、pandas.Series.str.findall方法

316-1、语法

316-2、参数

316-3、功能

316-4、返回值

316-5、说明

316-6、用法

316-6-1、数据准备

316-6-2、代码示例

316-6-3、结果输出

317、pandas.Series.str.fullmatch方法

317-1、语法

317-2、参数

317-3、功能

317-4、返回值

317-5、说明

317-6、用法

317-6-1、数据准备

317-6-2、代码示例

317-6-3、结果输出

318、pandas.Series.str.get方法

318-1、语法

318-2、参数

318-3、功能

318-4、返回值

318-5、说明

318-6、用法

318-6-1、数据准备

318-6-2、代码示例

318-6-3、结果输出

319、pandas.Series.str.index方法

319-1、语法

319-2、参数

319-3、功能

319-4、返回值

319-5、说明

319-6、用法

319-6-1、数据准备

319-6-2、代码示例

319-6-3、结果输出

320、pandas.Series.str.join方法

320-1、语法

320-2、参数

320-3、功能

320-4、返回值

320-5、说明

320-6、用法

320-6-1、数据准备

320-6-2、代码示例

320-6-3、结果输出

二、推荐阅读

1、Python筑基之旅

2、Python函数之旅

3、Python算法之旅

4、Python魔法之旅

5、博客个人主页

一、用法精讲

316、pandas.Series.str.findall方法
316-1、语法
# 316、pandas.Series.str.findall方法
pandas.Series.str.findall(pat, flags=0)
Find all occurrences of pattern or regular expression in the Series/Index.

Equivalent to applying re.findall() to all the elements in the Series/Index.

Parameters:
pat
str
Pattern or regular expression.

flags
int, default 0
Flags from re module, e.g. re.IGNORECASE (default is 0, which means no flags).

Returns:
Series/Index of lists of strings
All non-overlapping matches of pattern or regular expression in each string of this Series/Index.
316-2、参数

316-2-1、pat(必须)字符串或正则表达式,表示要查找的正则表达式模式,可以是简单的字符串或复杂的正则表达式。

316-2-2、flags(可选,默认值为0)整数,用于控制正则表达式匹配的标志。例如,可以使用re.IGNORECASE来进行大小写不敏感匹配,可以使用re模块中的任何标志。

316-3、功能

        将在每个字符串中查找与正则表达式模式匹配的所有子字符串,并将匹配结果以列表的形式返回。

316-4、返回值

        返回一个Series对象,其中每个元素都是一个列表,表示在原字符串中匹配的所有子字符串,如果某个字符串中没有匹配项,返回一个空列表。

316-5、说明

        使用场景:

316-5-1、文本数据分析:当你需要深入分析文本内容以提取特定信息时,比如从用户评论中提取关键字、实体或模式。

316-5-2、数据清洗:可以用于清洗数据,提取数据集中的特定格式。例如,从包含日期和时间的字符串中提取日期部分。

316-5-3、模式匹配和数据提取:在数据挖掘和特征提取任务中,当你需要从复杂字符串中提取特定模式(如电子邮件地址、URLs、电话号码等)时,该方法非常方便。

316-5-4、文档和报告生成:在自动生成报告或文档时,可以提取特定的段落或句子,以及统计特定词汇的出现频率。

316-5-5、机器学习特征工程:通过提取文本中的特征(如单词频率、特定词组等),可以为机器学习模型构建新的特征。

316-5-6、数据可视化:在数据可视化之前可以通过这个方法提取信息,以便更好地展示数据中的模式和趋势。

316-6、用法
316-6-1、数据准备
316-6-2、代码示例
# 316、pandas.Series.str.findall方法
# 316-1、文本数据分析
import pandas as pd
# 创建示例数据
data = {
    'comments': [
        "这个产品真的很好,很满意!",
        "太差了,完全不值得买。",
        "优质服务,让我感到惊喜。",
        "质量一般,但性价比高。",
        "一分价钱一分货,差强人意。"
    ]
}
df = pd.DataFrame(data)
# 使用findall提取关键词
df['good_bad'] = df['comments'].str.findall(r'优|差')
print(df, end='\n\n')

# 316-2、数据清洗
import pandas as pd
# 创建示例数据
data = {
    'timestamps': [
        "2023-10-01 12:30:00",
        "2023-10-02 14:45:00",
        "2023-10-03 09:15:00",
        "Invalid data",
        "2023-10-04 18:00:00"
    ]
}
df = pd.DataFrame(data)
# 使用findall提取日期
df['date'] = df['timestamps'].str.findall(r'\d{4}-\d{2}-\d{2}')
print(df, end='\n\n')

# 316-3、模式匹配和数据提取
import pandas as pd
# 创建示例数据
data = {
    'emails': [
        "请联系 support@example.com 进行咨询。",
        "info@domain.org 是我们的支持邮箱。",
        "invalid-email@com 是无效的邮箱。",
        "邮件可以发送到 admin123@my-site.co.uk。",
        "没有邮箱的文本。"
    ]
}
df = pd.DataFrame(data)
# 使用findall提取电子邮件
df['extracted_emails'] = df['emails'].str.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}')
print(df, end='\n\n')

# 316-4、数据可视化
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
# 配置字体,确保中文字符正常显示
matplotlib.rcParams['font.sans-serif'] = ['Microsoft YaHei']
matplotlib.rcParams['axes.unicode_minus'] = False  # 确保负号显示正常
# 创建示例数据
data = {
    'comments': [
        "这个产品真的很好,很满意!",
        "太差了,完全不值得买。",
        "优质服务,让我感到惊喜。",
        "质量一般,但性价比高。",
        "一分价钱一分货,差强人意。"
    ]
}
df = pd.DataFrame(data)
# 使用findall提取关键词
df['good_bad'] = df['comments'].str.findall(r'优|差')
# 统计关键词出现次数
# 使用列表推导式来检查每个列表中是否包含'差'
count_bad = sum(1 for lst in df['good_bad'] if '差' in lst)
# '优'的数量可以直接通过长度计算(假设每个列表最多包含一个'优')
count_good = sum(len(lst) for lst in df['good_bad'] if '优' in lst)
# 或者更简单地,因为findall已经返回了匹配项列表,我们可以直接计算所有列表中'优'的总数
# count_good = sum('优' in lst for lst in df['good_bad'])
# 可视化
labels = ['好', '差']
sizes = [count_good, count_bad]
plt.bar(labels, sizes, color='purple')
plt.title('关键词出现次数')
plt.xlabel('关键词')
plt.ylabel('次数')
plt.show()
316-6-3、结果输出
# 316、pandas.Series.str.findall方法
# 316-1、文本数据分析
#         comments good_bad
# 0  这个产品真的很好,很满意!       []
# 1    太差了,完全不值得买。      [差]
# 2   优质服务,让我感到惊喜。      [优]
# 3    质量一般,但性价比高。       []
# 4  一分价钱一分货,差强人意。      [差]

# 316-2、数据清洗
#             timestamps          date
# 0  2023-10-01 12:30:00  [2023-10-01]
# 1  2023-10-02 14:45:00  [2023-10-02]
# 2  2023-10-03 09:15:00  [2023-10-03]
# 3         Invalid data            []
# 4  2023-10-04 18:00:00  [2023-10-04]

# 316-3、模式匹配和数据提取
#                             emails          extracted_emails
# 0    请联系 support@example.com 进行咨询。     [support@example.com]
# 1        info@domain.org 是我们的支持邮箱。         [info@domain.org]
# 2        invalid-email@com 是无效的邮箱。                        []
# 3  邮件可以发送到 admin123@my-site.co.uk。  [admin123@my-site.co.uk]
# 4                         没有邮箱的文本。                        []

# 316-4、数据可视化
# 见图1

图1:

317、pandas.Series.str.fullmatch方法
317-1、语法
# 317、pandas.Series.str.fullmatch方法
pandas.Series.str.fullmatch(pat, case=True, flags=0, na=None)
Determine if each string entirely matches a regular expression.

Parameters:
pat
str
Character sequence or regular expression.

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.
317-2、参数

317-2-1、pat(必须)字符串或正则表达式,表示要查找的正则表达式模式,可以是简单的字符串或复杂的正则表达式。

317-2-2、case(可选,默认值为True)布尔值,如果为True,则匹配时区分大小写;如果为False,则不区分大小写。

317-2-3、flags(可选,默认值为0)整数,正则表达式的标志(如re.IGNORECASE等),用于修改正则表达式的功能,例如使匹配不区分大小写,该参数与case参数配合使用。

317-2-4、na(可选,默认值为None)用于指定当输入数据为NaN时返回的值,可以设置为任何对象,以替代缺失值的返回结果。

317-3、功能

        用于逐元素检查Series中的每个字符串是否完全匹配给定的正则表达式或字符串模式,它可以用来验证字符串是否符合特定格式。

317-4、返回值

        返回一个布尔型Series,其中每个元素对应于原始Series中每个字符串的匹配结果:

  • 如果字符串完全匹配给定模式,则返回True。
  • 如果字符串不匹配或为NaN(且na参数未设置),则返回Fasle。
  • 如果na参数被设置,当对应元素为NaN时返回na的值。
317-5、说明

        无

317-6、用法
317-6-1、数据准备
317-6-2、代码示例
# 317、pandas.Series.str.fullmatch方法
import pandas as pd
# 创建一个Series
s = pd.Series(['abc', '123', 'abc123', None])
# 使用fullmatch验证是否完全匹配字母串'abc'
result = s.str.fullmatch('abc')
print(result)
317-6-3、结果输出
# 317、pandas.Series.str.fullmatch方法
# 0     True
# 1    False
# 2    False
# 3     None
# dtype: object
318、pandas.Series.str.get方法
318-1、语法
# 318、pandas.Series.str.get方法
pandas.Series.str.get(i)
Extract element from each component at specified position or with specified key.

Extract element from lists, tuples, dict, or strings in each element in the Series/Index.

Parameters:
i
int or hashable dict label
Position or key of element to extract.

Returns:
Series or Index.
318-2、参数

318-2-1、i(必须)整数,指定要获取字符的位置(索引),可以是正整数(从字符串开始计数)或负整数(从字符串结束计数)。

318-3、功能

        用于从每个字符串中提取指定索引位置的字符,对于长度不足的字符串,返回值为NaN,可以用于访问字符串的特定字符,常见于数据清洗或提取特定信息的场景。

318-4、返回值

        返回一个Series,其中包含对应位置字符的值:

  • 如果指定位置的字符存在,则返回该字符。
  • 如果指定的位置超出了字符串的长度,则返回NaN。
  • 返回的Series与输入的Series具有相同的索引。
318-5、说明

        无

318-6、用法
318-6-1、数据准备
318-6-2、代码示例
# 318、pandas.Series.str.get方法
import pandas as pd
# 创建一个Series
s = pd.Series(['apple', 'banana', 'cherry', None])
# 使用get方法获取每个字符串的第一个字符
result = s.str.get(0)
print(result)
318-6-3、结果输出
# 318、pandas.Series.str.get方法
# 0       a
# 1       b
# 2       c
# 3    None
# dtype: object
319、pandas.Series.str.index方法
319-1、语法
# 319、pandas.Series.str.index方法
pandas.Series.str.index(sub, start=0, end=None)
Return lowest indexes in each string in Series/Index.

Each of the returned indexes corresponds to the position where the substring is fully contained between [start:end]. This is the same as str.find except instead of returning -1, it raises a ValueError when the substring is not found. Equivalent to standard str.index.

Parameters:
sub
str
Substring being searched.

start
int
Left edge index.

end
int
Right edge index.

Returns:
Series or Index of object.
319-2、参数

319-2-1、sub(必须)字符串,表示要查找的子字符串。

319-2-2、start(可选,默认值为0)整数,表示开始查找的起始位置(索引),默认为0,表示从字符串的开头开始查找。

319-2-3、end(可选,默认值为None)整数,表示结束查找的位置(索引),默认为None,表示查找到字符串的末尾。

319-3、功能

        用于在每个字符串中查找指定子字符串sub的第一个出现位置,如果找到,则返回该位置的索引;如果没有找到子字符串,则会抛出异常。

319-4、返回值

        返回一个Series,其中包含对应子字符串的起始索引位置:

  • 如果子字符串在对应的字符串中存在,则返回该子字符串第一次出现的起始位置。
  • 如果子字符串在字符串中不存在,则会引发ValueError。
  • 返回的Series与输入的Series具有相同的索引。
319-5、说明

        无

319-6、用法
319-6-1、数据准备
319-6-2、代码示例
# 319、pandas.Series.str.index方法
import pandas as pd
# 创建一个Series
s = pd.Series(['apple', 'banana', 'cherry', None])
result = []
for item in s:
    try:
        if item is not None:
            index = item.index('na')
            result.append(index)
        else:
            result.append(None)  # 或者使用NaN,如果Series是pandas的
    except ValueError:
        result.append(None)  # 或使用NaN
    except AttributeError:
        result.append(None)  # 处理非字符串类型
# 如果result需要是pandas Series
result = pd.Series(result, index=s.index)
print(result)
319-6-3、结果输出
# 319、pandas.Series.str.index方法
# 0    NaN
# 1    2.0
# 2    NaN
# 3    NaN
# dtype: float64
320、pandas.Series.str.join方法
320-1、语法
# 320、pandas.Series.str.join方法
pandas.Series.str.join(sep)
Join lists contained as elements in the Series/Index with passed delimiter.

If the elements of a Series are lists themselves, join the content of these lists using the delimiter passed to the function. This function is an equivalent to str.join().

Parameters:
sep
str
Delimiter to use between list entries.

Returns:
Series/Index: object
The list entries concatenated by intervening occurrences of the delimiter.

Raises:
AttributeError
If the supplied Series contains neither strings nor lists.
320-2、参数

320-2-1、sep(必须)字符串,一个分隔符字符串,指定用来连接每个Series元素的字符或字符串,在实际操作中,它可以是任意字符串,比如空格、逗号、换行符等。

320-3、功能

        用于将Series中的每个元素(通常是字符串或可以被转换为字符串的对象)连接成一个新的字符串,它特别有用当你有一个包含多个字符串的Series,并且希望将它们合并成一个单一的字符串,使用指定的分隔符进行分隔。

320-4、返回值

        返回一个新的Series,其中每个元素都是通过sep将原Series中对应元素连接而成的字符串。

320-5、说明

        无

320-6、用法
320-6-1、数据准备
320-6-2、代码示例
# 320、pandas.Series.str.join方法
import pandas as pd
# 创建一个示例Series
s = pd.Series(['a', 'b', 'c'])
# 使用str.join连接Series元素
result = s.str.join('-')
print(result)
320-6-3、结果输出
# 320、pandas.Series.str.join方法
# 0    a
# 1    b
# 2    c
# dtype: object

二、推荐阅读

1、Python筑基之旅
2、Python函数之旅
3、Python算法之旅
4、Python魔法之旅
5、博客个人主页
  • 32
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神奇夜光杯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值