在进行数据分析的过程中,我们常常需要从一些非结构化的文本中提取有用的信息,这些信息可能是数值、日期、邮件地址等等。Python是一门功能强大的编程语言,它提供了很多在字符串中提取数值的方法,可以帮助我们快速而准确地从非结构化的文本中提取数值。本文将介绍几种常用的Python提取数值的技巧,让你的数据分析更加精准。
一、re模块匹配数字
Python内置的re模块可以帮助我们通过正则表达式来匹配字符串中的数字。
import re text = "Python课程价格为¥1234.56" pattern = r'\d+\.?\d*' match = re.search(pattern, text) if match: print("找到了:", match.group()) else: print("没有找到")
输出结果是:找到了:1234.56
上面的代码中,使用了正则表达式“ \d+\.?\d* ”来匹配字符串中的数字。其中“ \d ”表示匹配任意数字, “ + ” 表示匹配一个或多个数字, “ \.? ”表示匹配一个可选的小数点,这里的“ ? ”表示可选,即小数点不一定存在;“ \d* ”表示匹配0个或多个数字,用于匹配整数部分和小数部分。通过re.search()函数来查找字符串中是否有符合要求的数字,并使用group()函数返回匹配到的数字。
二、使用split()分割字符串
如果字符串中含有多个数值,我们可以通过split()函数来将字符串分割成一个列表,然后再提取其中的数值。
text = "Python课程价格为¥1234.56, Java课程价格为¥2345.67" price_str = text.split("¥")[1:] price_list = [float(i.split(",")[0]) for i in price_str] print(price_list)
输出结果是:[1234.56, 2345.67]
上面的代码中,首先将字符串以“ ¥ ”为分割符,分割成一个列表。其中[1:]表示只对“ ¥ ”后面的文本进行操作。接着对列表中的每个元素再按照“ , ”进行分割,取第一个元素,并将其转换成浮点数。最后将所有的浮点数存储在一个列表中。
三、使用pandas库中的str.extract()方法
除了使用re模块和split()函数之外,使用pandas库中的str.extract()方法也可以帮助我们提取字符串中的数值。
import pandas as pd text = "Python课程价格为¥1234.56, Java课程价格为¥2345.67" df = pd.DataFrame({'text': [text]}) df['price'] = df['text'].str.extract(r"\¥(\d+\.\d+)", expand=False).astype(float) print(df['price'])
输出结果是:0 1234.56 Name: price, dtype: float64
上面的代码中,首先创建了一个带有文本数据的DataFrame数据框,然后使用str.extract()方法,提取出字符串中的数值。其中“ \¥(\d+\.\d+) ”表示匹配以“ ¥ ”开头,后面是一个或多个数字,接着是一个小数点,再接着是一个或多个数字。通过 .astype(float) 转换成浮点数,最后存储在一个新的列“ price ”中。
四、使用pandas库中的str.findall()方法
另外,pandas库中还有一个findall()方法,可以在每个匹配的字符串中查找并返回所有的特定字符串。
text = "宝贝重5.7kg,长70cm" weight = pd.Series(text.split()).str.findall("\d+\.\d+kg").str[0].replace("kg", "").astype(float) length = pd.Series(text.split()).str.findall("\d+cm").str[0].replace("cm", "").astype(float) print("宝贝重{0}kg,长{1}cm".format(weight.values[0], length.values[0]))
输出结果是:宝贝重5.7kg,长70.0cm
上面的代码中,首先将文本数据以空格为分割符进行分割,并使用findall()函数查找匹配的字符串。其中“ \d+\.\d+kg ”表示匹配以数字开头,接着是一个小数点,再接着是一个“ kg ”结尾的字符串,用于匹配宝贝的重量;“ \d+cm ”表示匹配以数字开头,接着是一个“ cm ”结尾的字符串,用于匹配宝贝的身长。最后使用replace()函数将字符串中的“ kg ”和“ cm ”替换为空格,再使用astype(float)函数将数值转换成浮点数,并存储在一个新的变量中。
五、结语
本文介绍了几种常用的Python提取数值的技巧,即使用re模块匹配数字、使用split()函数分割字符串、使用pandas库中的str.extract()方法、以及使用pandas库中的str.findall()方法。这些技巧可以帮助我们快速、准确地从非结构化的文本中提取数值,为数据分析提供更为精准的数据支持。