首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【马哥原创】python中pandas库常用的数据清洗方法

【马哥原创】python中pandas库常用的数据清洗方法

原创
作者头像
马哥python说
发布于 2025-06-03 05:10:00
发布于 2025-06-03 05:10:00
20900
代码可运行
举报
文章被收录于专栏:Python数据分析Python数据分析
运行总次数:0
代码可运行

一、前言

Hi,大家!我是@马哥python说,一枚10年程序猿。

自从开立账号以来,经常在私信和学习群中和小伙伴沟通一些数据清洗方面的问题:(在我看来,数据清洗是数据分析之前的预处理动作,需不需要做、做哪些清洗项,取决于源数据的质量。清洗的好坏决定了后续数据分析的可行度和准确率)

沟通记录
沟通记录

可见此方面需求量甚大。今天特意总结出,用pandas进行数据清洗的以下几种常用方法,主要包括处理缺失值、重复数据、异常值、数据类型转换、格式统一等方面,供小伙伴们参考。

二、数据清洗教程

2.1 数值型数据

假设现在有一份待清洗数据《胡润百富榜_待清洗.csv》, 数据大概长这样:

胡润百富榜_待清洗.csv
胡润百富榜_待清洗.csv

针对数据内的异常情况,做以下清洗处理,并保存清洗后数据。

数据清洗的源代码如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 读取数据
df = pd.read_csv('胡润百富榜_待清洗.csv')

# 去除全名_中文列中名字含有的空格
df['全名_中文'] = df['全名_中文'].str.replace(' ', '')

# 处理出生地_英文列的缺失值,用出生地_中文列对应的值替代
df['出生地_英文'] = df['出生地_英文'].fillna(df['出生地_中文'])

# 将排名变化列和财富值变化列的百分数转换为数值型
df['排名变化'] = df['排名变化'].str.rstrip('%').astype(float) / 100
df['财富值变化'] = df['财富值变化'].str.rstrip('%').astype(float) / 100

# 将年龄列转换为数值型并处理非数值值
df['年龄'] = pd.to_numeric(df['年龄'], errors='coerce')

# 去除没用的列-照片列
df = df.drop(columns='照片')

# 将排名变化列中的特殊值替换为 0
df['排名变化'] = df['排名变化'].replace('New', '0')

# 将财富值变化列中的特殊值替换为 0
df['财富值变化'] = df['财富值变化'].replace('NEW', '0')

# 将结果另外保存为csv文件
df.to_csv('胡润百富榜_清洗后.csv', index=False, encoding='utf_8_sig')

以上便是数值型数据的常用清洗方法。

2.2 文本型数据

假设现在有一份待清洗数据《淄博烧烤B站评论_待清洗.csv》, 数据大概长这样:

淄博烧烤B站评论_待清洗.csv
淄博烧烤B站评论_待清洗.csv

数据中最后一列”评论内容“为文本型,主要针对该列展开数据清洗。

数据清洗的源代码如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 读取数据
df = pd.read_csv('淄博烧烤B站评论_待清洗.csv')

# 加载中文停用词
with open('cn_stopwords.txt', 'r', encoding='utf-8') as file:
    stopwords = [line.strip() for line in file.readlines()]

def remove_emoji(text):
	"""清洗表情符号"""
	emoji_pattern = re.compile(
		"["
		u"\U0001F600-\U0001F64F"  # emoticons  
		u"\U0001F300-\U0001F5FF"  # symbols & pictographs  
		u"\U0001F680-\U0001F6FF"  # transport & map symbols  
		u"\U0001F1E0-\U0001F1FF"  # flags (iOS)  
		u"\U00002702-\U000027B0"  # Arrows  
		u"\U000024C2-\U0001F251"  # currency, units (², ㎎, ®, ₿)  
		u"\U0001f926-\U0001f937"  # Handshake  
		# 可以根据需要添加更多的Unicode范围  
		"]+",
		flags=re.UNICODE
	)
	return emoji_pattern.sub(r' ', text)

# 定义函数去除停用词、转换为小写、去除表情符号
def clean_text(text):
	# 去除表情符号
    text = remove_emoji(text)
    # 转换为小写
    text = text.lower()
    # 分词、去除停用词
    words = text.split()
    filtered_words = [word for word in words if word not in stopwords]
    return ' '.join(filtered_words)

# 对评论内容列进行数据清洗
df['评论内容'] = df['评论内容'].apply(clean_text)

# 去除空的评论内容所在的行
df = df[df['评论内容'].str.strip() != '']

# 把清洗结果另外保存一个csv文件
df.to_csv('淄博烧烤B站评论_清洗后.csv', index=False, encoding='utf_8_sig')

以上便是文本型数据的常用清洗方法。

三、结语

以上就是我分享的数据清洗实战代码了,后续的pandas数据分析及可视化部分,也可以参考我的往期原创:

【爬虫+情感判定+饼图+Top10高频词+词云图】"王心凌"热门弹幕python舆情分析 | 2023.10发布 【爬虫+数据清洗+可视化分析】舆情分析"淄博烧烤"的B站评论 【Pandas vs SQL】数据分析代码逐行比对,孰优孰劣?

可能不全,各位可在评论区补充。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验