
文本數據是數據分析和機器學習中最常用的數據類型之一。 然而,文本數據往往是雜亂無章的,需要清洗和預處理才能被有效分析。 Pandas 是一個強大的 Python 數據分析庫,它提供了一個方便的 str 訪問器來幫助您清理和操作文本數據。
Pandas 中的 str 訪問器提供了許多有用的字符串操作,可以應用于 Pandas 系列的每個元素。 這些操作包括字符串拆分、連接、替換等。 在這里,我們將了解一些最有用的 str 操作,它們可以幫助您清理和操作文本數據。
讓我們從使用文本數據創建示例數據框開始:
import pandas as pd
data = {"text_column": ["this is a text", "an example", "of text data", "in pandas"]}
df = pd.DataFrame(data)
print(df)
輸出
text_column
0 this is a text
1 an example
2 of text data
3 in pandas
1、小寫轉換
有時,文本數據可能包含混合大小寫字符,這會導致難以分析和比較。 str 訪問器提供了一個 lower() 方法來將所有字符轉換為小寫。
df["text_column"] = df["text_column"].str.lower()
print(df)
輸出
text_column
0 this is a text
1 an example
2 of text data
3 in pandas
2、strip方法
文本數據可能包含不需要的字符,如空格、制表符或換行符。 str 訪問器提供了 strip() 方法來從系列中每個字符串的開頭和結尾刪除這些字符。
df["text_column"] = df["text_column"].str.strip()
print(df)
輸出:
text_column
0 this is a text
1 an example
2 of text data
3 in pandas
3、替代法
str 訪問器還提供了一種 replace() 方法,用于在系列的每個元素中用一個字符串替換另一個字符串。 當您想要替換文本數據中的特定單詞或字符時,這很有用。
df["text_column"] = df["text_column"].str.replace("text", "string")
print(df)
輸出:
text_column
0 this is a string
1 an example
2 of string data
3 in pandas
4、另一個重要的函數是extract()
此功能可用于從文本中提取特定模式。 extract() 函數將正則表達式模式作為參數,并返回一個或多個匹配項作為新的 DataFrame 列。 讓我們看一個例子:
import pandas as pd
#創建示例 DataFrame
df = pd.DataFrame({'text': ['I love cats!', 'Dogs are the best', 'I love dogs and cats']})
# 使用 extract() 函數提取“love”這個詞
df['love'] = df['text'].str.extract(r'(\w+)\s(\w+)')
# Check the DataFrame
print(df)
這將產生以下輸出:
text love
0 I love cats! love
1 Dogs are the best NaN
2 I love dogs and cats love
5、另一個有用的函數是split()
此函數可用于根據指定的分隔符將文本拆分為多個部分。 split() 函數返回從原始文本中拆分出來的子字符串列表。 讓我們看一個例子:
import pandas as pd
#創建示例 DataFrame
df = pd.DataFrame({'text': ['I love cats!', 'Dogs are the best', 'I love dogs and cats']})
# 使用 split() 函數將文本拆分為單詞
df['text'] = df['text'].str.split()
# Check the DataFrame
print(df
這將產生以下輸出:
text
0 [I, love, cats!]
1 [Dogs, are, the, best]
2 [I, love, dogs, and, cats]
如您所見,split() 函數已將文本拆分為單詞并返回子字符串列表。
6、去除標點符號和特殊字符
在文本數據中,我們經常會有很多與分析無關的標點符號和特殊字符。 要刪除它們,我們可以使用 str.translate() 方法和 str.maketrans() 方法。
import string
#創建特殊字符和標點符號到 None 的映射
translator = str.maketrans("", "", string.punctuation)
# 將翻譯器應用于文本列
df["text"] = df["text"].str.translate(translator)
7、刪除停用詞
停用詞是對文本意義不大的常用詞,通常會被刪除以簡化分析。 要刪除停用詞,我們可以使用 nltk 庫。
import nltk
from nltk.corpus import stopwords
# 下載停用詞語料庫
nltk.download("stopwords")
# 獲取停用詞列表
stop_words = set(stopwords.words("english"))
# 從文本列中刪除停用詞
df["text"] = df["text"].apply(lambda x: " ".join([word for word in x.split() if word not in stop_words]))
8、對文本進行詞干化或詞形還原
詞干提取和詞形還原是兩種重要的 NLP 技術,用于將單詞簡化為基本形式。 它們有助于簡化文本數據并使其更易于分析。
詞干提取是將單詞簡化為基本形式或詞根形式的過程。 它涉及刪除詞的后綴或詞尾以得到詞根。 例如,“running”、“runner”和“ran”都使用詞干提取法簡化為詞根形式“run”。
另一方面,詞形還原是使用基于字典的方法將單詞簡化為基本形式的過程。 與詞干提取不同,詞形還原考慮單詞的上下文并將它們映射到最有意義的基本形式。 例如,“running”將簡化為“run”,“is”將簡化為“be”。
詞干提取和詞形還原都有各自的優點和缺點,它們之間的選擇取決于用例。 詞干化更快更簡單,但詞形還原更準確并產生更有意義的基本形式。
要在 Pandas 中對文本進行詞干化或詞形還原,我們可以使用 nltk 庫。 以下是如何使用 nltk 執行詞干提取的示例:
import nltk
from nltk.stem import PorterStemmer
# 初始化詞干分析器
stemmer = PorterStemmer()
# 定義一個函數來阻止文本
def stem_text(text):
return ' '.join([stemmer.stem(word) for word in text.split()])
# 將詞干提取功能應用于文本列
df['text_stemmed'] = df['text'].apply(stem_text)
以下是如何使用 nltk 執行詞形還原的示例:
import nltk
from nltk.stem import WordNetLemmatizer
#初始化詞形還原器
lemmatizer = WordNetLemmatizer()
# 定義一個函數來對文本進行詞形還原
def lemmatize_text(text):
return ' '.join([lemmatizer.lemmatize(word) for word in text.split()])
# 將詞形還原函數應用于文本列
df['text_lemmatized'] = df['text'].apply(lemmatize_text)
在這兩種情況下,詞干化或詞形化的文本都存儲在數據框中的新列中。 這個新列可用于進一步分析或建模。