Hi,大家!我是@马哥python说,一枚10年程序猿。
自从开立账号以来,经常在私信和学习群中和小伙伴沟通一些数据清洗方面的问题:(在我看来,数据清洗是数据分析之前的预处理动作,需不需要做、做哪些清洗项,取决于源数据的质量。清洗的好坏决定了后续数据分析的可行度和准确率)
可见此方面需求量甚大。今天特意总结出,用pandas进行数据清洗的以下几种常用方法,主要包括处理缺失值、重复数据、异常值、数据类型转换、格式统一等方面,供小伙伴们参考。
假设现在有一份待清洗数据《胡润百富榜_待清洗.csv》, 数据大概长这样:
针对数据内的异常情况,做以下清洗处理,并保存清洗后数据。
数据清洗的源代码如下:
# 读取数据
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')
以上便是数值型数据的常用清洗方法。
假设现在有一份待清洗数据《淄博烧烤B站评论_待清洗.csv》, 数据大概长这样:
数据中最后一列”评论内容“为文本型,主要针对该列展开数据清洗。
数据清洗的源代码如下:
# 读取数据
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 删除。