您的位置:

Python提取数值的技巧,让你的数据分析更精准

在进行数据分析的过程中,我们常常需要从一些非结构化的文本中提取有用的信息,这些信息可能是数值、日期、邮件地址等等。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()方法。这些技巧可以帮助我们快速、准确地从非结构化的文本中提取数值,为数据分析提供更为精准的数据支持。