在進行數據分析的過程中,我們常常需要從一些非結構化的文本中提取有用的信息,這些信息可能是數值、日期、郵件地址等等。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()方法。這些技巧可以幫助我們快速、準確地從非結構化的文本中提取數值,為數據分析提供更為精準的數據支持。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/153554.html