📜  清理给定 Pandas Dataframe 中的字符串数据(1)

📅  最后修改于: 2023-12-03 15:27:02.478000             🧑  作者: Mango

清理给定 Pandas Dataframe 中的字符串数据

在处理数据时,我们往往需要清理和处理字符串数据,以规范化、标准化或去除噪音数据。本文将介绍如何使用 Python 的 Pandas 库清理给定 Pandas Dataframe 中的字符串数据。

1. 导入 Pandas 库和样例数据

在开始之前,我们需要先导入 Pandas 库并载入一个样例数据,以便演示如何清理字符串数据。

import pandas as pd

# 创建一个包含字符串数据的 Pandas Dataframe
data = {'id': [1, 2, 3, 4, 5],
        'name': ['John', 'Alice', ' Bob ', 'Chris ', 'Lily '],
        'email': [' john@xyz.com', 'alice@xyz.com', 'bob@abc.com', 'chris@gmail.com', 'lily@gmail.com ']}
df = pd.DataFrame(data)

# 输出原始数据
print("原始数据:")
print(df)

输出结果:

原始数据:
   id   name            email
0   1   John     john@xyz.com
1   2  Alice    alice@xyz.com
2   3    Bob       bob@abc.com
3   4  Chris  chris@gmail.com
4   5  Lily    lily@gmail.com 
2. 规范化字符串数据

在清理字符串数据时,我们经常需要规范化字符串的格式,例如去除首尾空格、将字符串转换为小写字母等。使用 Pandas 的 str 方法可以方便地完成这些任务。

# 去除name列的首尾空格,将email列转换为小写字母
df['name'] = df['name'].str.strip()
df['email'] = df['email'].str.lower()

# 输出规范化后的数据
print("规范化后的数据:")
print(df)

输出结果:

规范化后的数据:
   id   name            email
0   1   John     john@xyz.com
1   2  Alice    alice@xyz.com
2   3    Bob       bob@abc.com
3   4  Chris  chris@gmail.com
4   5   Lily   lily@gmail.com

注意,str 方法返回一个 Series,而不是一个字符串。因此,我们需要使用 Series 的方法,如 strip() 和 lower(),而不是字符串的方法。

3. 使用正则表达式处理字符串数据

在清理字符串数据时,我们通常需要使用正则表达式来匹配、替换或过滤文本数据。Pandas 的 str 方法允许我们使用正则表达式来处理字符串数据。

以下是一些常用的正则表达式操作:

a. 匹配字符串中的子串

# 提取email列中的域名
df['domain'] = df['email'].str.extract(r'@(.+)\.')

b. 替换字符串中的子串

# 将email列中的域名从gmail.com替换为yahoo.com
df['email'] = df['email'].str.replace(r'@gmail\.com', '@yahoo.com')

c. 过滤符合条件的字符串

# 过滤出name列以L开头的数据
df_filtered = df[df['name'].str.match(r'^L.*')]
4. 删除字符串中的特殊字符

有时我们需要删除字符串中的特殊字符,例如逗号、引号、冒号等。使用 Pandas 的 str.replace() 方法可以方便地完成这个任务。

# 删除name列中所有空格以外的特殊字符
df['name'] = df['name'].str.replace(r'[^\w\s]', '')
5. 删除重复的字符串数据

当数据集中存在重复的字符串数据时,我们需要将其删除以避免数据冗余和计算偏差。

# 删除重复的数据
df.drop_duplicates(inplace=True)
结论

通过本文的介绍,我们可以看到 Pandas 提供了强大的字符串处理方法,可以方便地对字符串数据进行清理和处理。这些方法广泛应用于数据科学的各个领域,包括数据的清理、分析和建模。

完整代码如下:

import pandas as pd

# 创建一个包含字符串数据的 Pandas Dataframe
data = {'id': [1, 2, 3, 4, 5],
        'name': ['John', 'Alice', ' Bob ', 'Chris ', 'Lily '],
        'email': [' john@xyz.com', 'alice@xyz.com', 'bob@abc.com', 'chris@gmail.com', 'lily@gmail.com ']}
df = pd.DataFrame(data)

# 去除name列的首尾空格,将email列转换为小写字母
df['name'] = df['name'].str.strip()
df['email'] = df['email'].str.lower()

# 提取email列中的域名
df['domain'] = df['email'].str.extract(r'@(.+)\.')

# 将email列中的域名从gmail.com替换为yahoo.com
df['email'] = df['email'].str.replace(r'@gmail\.com', '@yahoo.com')

# 删除name列中所有空格以外的特殊字符
df['name'] = df['name'].str.replace(r'[^\w\s]', '')

# 过滤出name列以L开头的数据
df_filtered = df[df['name'].str.match(r'^L.*')]

# 删除重复的数据
df.drop_duplicates(inplace=True)

# 输出最终结果
print("最终结果:")
print(df)