如何在Pandas数据框架中预处理字符串数据

如何在Pandas数据框架中预处理字符串数据

有时,我们要处理的数据可能被塞在一列中,但为了我们能对数据进行处理,数据应该被分散到不同的列中,而且这些列必须是不同的数据类型。当所有的数据被合并到一个字符串中时,需要对该字符串进行预处理。这篇文章是关于在Pandas DataFrame中预处理字符串数据。

方法一:通过使用PandasSeries.str.extract()函数

语法:

Series.str.extract(pat, flags=0, expand=True)

参数:

  • pat:帮助我们将数据分成几列的regex表达式。
  • flags:默认为0,没有标志,参数为int。
  • expand: 如果为真,则返回一个每个捕获组有一列的DataFrame。

返回:

方法返回一个数据框架或系列

第1步:导入软件包

Pandas软件包已导入。

# import packages
import pandas as pd

第2步:创建数据框架:

pd.DataFrame()方法是用来创建一个给定的字典的数据框架。我们创建一个需要预处理的数据框架。所有的数据都驻留在开始时的一个字符串格式的单列中。

# creating data
data = {'CovidData': ['Anhui 1.0 2020-01-22 17:00:00',
                      'Beijing 14.0 2020-01-22 17:00:00',
                      'Washington 1.0 2020-01-24 17:00:00',
                      'Victoria 3.0 2020-01-31 23:59:00',
                      'Macau 10.0 2020-02-06 14:23:04']}
  
#creating a pandas dataframe 
dataset = pd.DataFrame(data)

str.extract()接收一个重码表达式字符串和其他参数来提取数据到列中。(….-…-… …:…:…)用于提取格式为(yyyy-mm-dd hh:mm:ss)的日期,Datetime对象是这种格式的。

dataset['LastUpdated'] = dataset['CovidData'].str.extract(
    '(....-..-.. ..:..:..)', expand=True)
dataset['LastUpdated']

输出:

如何在Pandas数据框架中预处理字符串数据?

str.extract()接收一个regex表达式字符串”([A-Za-z]+)”,它提取的是有字母的字符串。

dataset['State'] = dataset['CovidData'].str.extract('([A-Za-z]+)', expand=True)
dataset['State']

输出:

如何在Pandas数据框架中预处理字符串数据?

‘(\d+.\d)’是用来匹配小数的。+代表’.’(小数)前的一个或多个数字和小数后的一个数字,例如:12.1,3.5等。

dataset['confirmed_cases'] = dataset['CovidData'].str.extract(
    '(\d+.\d)', expand=True)
dataset['confirmed_cases']

输出:

如何在Pandas数据框架中预处理字符串数据?

预处理前的数据框架:

如何在Pandas数据框架中预处理字符串数据?

预处理后的数据框架:

如何在Pandas数据框架中预处理字符串数据?

方法2:使用apply()函数

在这个方法中,我们预处理了一个包含电影评论的数据集,它就是烂番茄数据集。我们导入了Pandas的包、re和stop_words包。我们在一个叫做stop_words的变量中存储停止词。数据集是在pd.read_csv()方法的帮助下导入的。我们使用apply()方法来预处理字符串数据。str.lower用于将所有字符串数据转换为小写字母。re.sub(r'[^\w\s]’, “, x)帮助我们摆脱标点符号,最后,我们从字符串数据中删除stop_words。由于CSV文件很大,所以显示了一部分数据,以看到其中的差别。

查看和下载CSV文件,请点击这里。

# import packages
import pandas as pd
from stop_words import get_stop_words
import re
  
# stop words
stop_words = get_stop_words('en')
  
# reading the csv file
data = pd.read_csv('test.csv')
  
print('Before string processing : ')
print(data[(data['PhraseId'] >= 157139) & (
    data['PhraseId'] <= 157141)]['Phrase'])
  
# converting all text to lower case in the Phrase column
data['Phrase'] = data['Phrase'].apply(str.lower)
  
# using regex to remove punctuation
data['Phrase'] = data['Phrase'].apply(lambda x: re.sub(r'[^\w\s]', '', x)
                                      )
  
# removing stop words
data['Phrase'] = data['Phrase'].apply(lambda x: ' '.join(
    w for w in x.split() if w not in stop_words))
  
print('After string processing : ')
data[(data['PhraseId'] >= 157139) & (data['PhraseId'] <= 157141)]['Phrase']

输出:

如何在Pandas数据框架中预处理字符串数据?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程