pandas.str.extract()是pandas库中的一个函数,用于从每个字符串中提取匹配给定正则表达式的第一个匹配子串。
使用方法:
pandas.str.extract(pat, flags=0, expand=True)
参数说明
- pat:正则表达式的模式字符串
- flags:re模块的匹配标志,如re.IGNORECASE、re.DOTALL等,默认为0,即没有标志
- expand:是否将每个匹配的字符串拆分成新的列,默认为True
返回值
一个包含匹配子串的新Series或DataFrame。
实例1
假设我们想从以下网址中提取国家代码。
url = 'https://zh.wikipedia.org/wiki/ISO_3166-1'
使用正则表达式“(?<=)\s(([A-Z]{2}))$”,并将结果保存在名为“code”的新列中。
import pandas as pd
tables = pd.read_html(url)
df = tables[0]
df['code'] = df['名称(英文)'].str.extract('(?<=</a>)\s\(([A-Z]{2})\)$')
print(df)
输出:
英文短名称 二位代码 三位代码 ... 中文名称 ISO 3166 上標為独立主权 code
0 Afghanistan AF AFG ... 阿富汗 是 NaN
1 Åland Islands AX ALA ... 奥兰 否 NaN
2 Albania AL ALB ... 阿尔巴尼亚 是 NaN
3 Algeria DZ DZA ... 阿尔及利亚 是 NaN
4 American Samoa AS ASM ... 美属萨摩亚 否 NaN
.. ... ... ... ... ... ... ...
244 Wallis and Futuna WF WLF ... 瓦利斯和富图纳 否 NaN
245 Western Sahara EH ESH ... 西撒哈拉 否 NaN
246 Yemen YE YEM ... 葉門 是 NaN
247 Zambia ZM ZMB ... 尚比亞 是 NaN
248 Zimbabwe ZW ZWE ... 辛巴威 是 NaN
[249 rows x 8 columns]
实例2
我们有一些电子邮件地址。 例如,
emails = pd.Series(['abc@demo.com', 'info@example.com', 'support@pandas.com'])
现在我们想从中提取用户名和域名,使用正则表达式并将结果保存在新Series 中。
user_name = emails.str.extract(r'(\w+)@', expand=False)
domain_name = emails.str.extract(r'@(\w+.\w+)', expand=False)
print(user_name)
print(domain_name)
输出:
0 abc
1 info
2 support
dtype: object
0 demo.com
1 example.com
2 pandas.com
dtype: object
总结
使用pandas.str.extract(),我们可以快速从字符串中提取匹配给定正则表达式的第一个匹配子串。 该函数对于对文本数据的处理非常有用,例如从数据集中提取日期和时间信息,或从大量电子邮件地址中提取用户名和域名。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解pandas.str.extract()(提取字符串)函数使用方法 - Python技术站