如何使用Python对Excel、CSV文件完成数据清洗与预处理?

server/2024/10/20 13:59:10/

在数据分析和机器学习项目中,数据清洗与预处理是不可或缺的重要环节。

现实世界中的数据往往是不完整、不一致且含有噪声的,这些问题会严重影响数据分析的质量和机器学习模型的性能。

Python作为一门强大的编程语言,提供了多种库和工具来帮助我们高效地完成数据清洗与预处理任务,其中最常用的库包括Pandas、NumPy、SciPy等。

本文将详细介绍如何使用Python对Excel和CSV格式的数据文件进行清洗和预处理。

数据清洗与预处理概述

数据清洗与预处理主要包括以下几个步骤:

‌数据清洗‌:删除或修正数据集中的无效数据、重复数据、异常值等。
‌数据集成‌:将来自不同数据源的数据合并成一个统一的数据集。
‌数据变换‌:对数据进行规范化处理,如数据类型转换、标准化、归一化等。
‌数据规约‌:通过数据聚合、降维等技术减少数据量,提高处理效率。

读取CSV文件

Python的Pandas库提供了read_csv函数来读取CSV文件。

这个函数非常灵活,可以处理各种格式的CSV文件,并允许用户指定分隔符、列名、索引列等参数。

python">
import pandas as pd# 读取CSV文件
df = pd.read_csv('data.csv', sep=',', header=0)# 查看数据前几行
print(df.head())
读取Excel文件

Pandas的read_excel函数可以用来读取Excel文件。这个函数同样支持多种参数,如指定工作表名称、列名等。

python"># 读取Excel文件
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1', header=0)# 查看数据前几行
print(df_excel.head())

缺失值是数据清洗中常见的问题。Pandas提供了多种方法来处理缺失值,包括删除含缺失值的行或列、填充缺失值等。

删除含缺失值的行或列
python"># 删除含缺失值的行
df_cleaned = df.dropna()# 删除含缺失值的列
df_cleaned_cols = df.dropna(axis=1)
填充缺失值

填充缺失值有多种方法,如使用均值、中位数、众数填充,或者使用固定值填充。

python">
# 使用均值填充数值型列
df_filled_mean = df.fillna(df.mean())# 使用固定值填充
df_filled_value = df.fillna(value=0)# 使用向前填充或向后填充
df_filled_ffill = df.fillna(method='ffill')
df_filled_bfill = df.fillna(method='bfill')

对于更复杂的填充策略,可以使用sklearn.impute模块中的SimpleImputer类。

python">
from sklearn.impute import SimpleImputer# 实例化SimpleImputer,使用均值填充
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
df_filled_sk = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
重复值处理

Pandas提供了drop_duplicates函数来删除重复的行。

python"># 删除重复行,保留第一次出现的行
df_unique = df.drop_duplicates(keep='first')# 删除重复行,保留最后一次出现的行
df_unique_last = df.drop_duplicates(keep='last')

异常值可能会严重影响数据分析的结果。常用的异常值检测方法包括箱线图法和Z分数法。

箱线图法
python">
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1df_outlier_removed = df[~((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).any(axis=1)]
Z分数法
python">
from scipy import statsz_scores = stats.zscore(df)
df_zscore = df[(np.abs(z_scores) < 3).all(axis=1)]
数据类型转换

Pandas允许将列的数据类型从一种转换为另一种,这对于数据清洗和后续分析非常重要。

python"># 将字符串类型的日期转换为日期类型
df['date'] = pd.to_datetime(df['date'])# 将字符串类型的数值转换为整型或浮点型
df['number'] = df['number'].astype(int)
df['float_number'] = df['float_number'].astype(float)
字符串处理

在清洗数据时,经常需要对字符串进行处理,如去除空格、大小写转换、分割字符串等。

python"># 去除字符串两边空格
df['column'] = df['column'].str.strip()# 大小写转换
df['column_lower'] = df['column'].str.lower()
df['column_upper'] = df['column'].str.upper()# 字符串分割
df[['first_word', 'second_word']] = df['sentence'].str.split(' ', expand=True)
正则表达式

正则表达式是数据清洗中非常强大的工具,可以用来查找和替换字符串中的特定模式。

python">
import re# 使用正则表达式替换字符串
df['column'] = df['column'].apply(lambda x: re.sub(r'\d+', '', x))  # 移除所有数字
数据标准化与归一化

数据标准化和归一化是数据预处理中常用的技术,可以使不同量纲的数据具有相同的尺度,便于后续分析。

python">
from sklearn.preprocessing import StandardScaler, MinMaxScaler# 标准化
scaler = StandardScaler()
df_scaled = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)# 归一化
scaler = MinMaxScaler()
df_normalized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
特征构造

特征构造是通过创建新特征或对现有特征进行转换来提高模型性能的过程。

python">
# 创建新特征:日期特征分解
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day# 特征组合
df['total_amount'] = df['quantity'] * df['price']
数据规约

数据规约通过数据聚合、降维等技术减少数据量,提高处理效率。Pandas提供了多种数据聚合方法,如groupby和pivot_table。

python">
# 数据聚合
grouped = df.groupby('category').agg({'sales': 'sum', 'profit': 'mean'})# 数据透视表
pivot_table = pd.pivot_table(df, values='sales', index='date', columns='category', aggfunc='sum')
数据可视化

数据可视化是理解和分析数据的重要手段。Python的Matplotlib和Seaborn库提供了丰富的绘图功能。

python">
import matplotlib.pyplot as plt
import seaborn as sns# 绘制直方图
df['column'].hist()
plt.show()# 绘制箱线图
sns.boxplot(x='category', y='sales', data=df)
plt.show()# 绘制散点图
plt.scatter(df['column1'], df['column2'])
plt.show()
结论

数据清洗与预处理是数据分析和机器学习项目中不可或缺的一环。Python提供了丰富的库和工具,如Pandas、NumPy、SciPy等,可以帮助我们高效地完成这一任务。

通过本文的介绍,我们了解了如何使用Python对Excel和CSV文件进行数据清洗、缺失值处理、重复值处理、异常值处理、数据类型转换、字符串处理、正则表达式应用、数据变换、特征构造、数据规约以及数据可视化等步骤。

希望这些内容能帮助读者在实际项目中更好地进行数据清洗与预处理工作。


http://www.ppmy.cn/server/133357.html

相关文章

AWS Aurora 实例更换实战:最小化业务影响的升级策略

在本文中,我们将详细介绍如何在生产环境中安全地更换 AWS Aurora 实例,包括主写实例和只读实例的更换过程。我们的目标是将影响降到最低,同时确保系统的稳定性和性能。 背景 随着业务的增长,我们需要升级现有的 Aurora 实例以提供更好的性能和更大的容量。本次更换涉及主…

【CTF刷题9】2024.10.19

[MoeCTF 2021]babyRCE 考点&#xff1a;关键词过滤&#xff08;绕过方法参考往期博客&#xff09; 来源&#xff1a;nssctf <?php$rce $_GET[rce]; if (isset($rce)) {if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\|\%|\&g…

TiDB 关联子查询及半连接的优化实践

作者&#xff1a; 数据源的TiDB学习之路 原文来源&#xff1a; https://tidb.net/blog/e9563a23 导读 TiDB 针对子查询语句会执行多种 子查询相关的优化 &#xff0c;以提升子查询的执行性能。半连接语句和关联子查询语句是常用的两类子查询&#xff0c;TiDB 优化器默认包…

python 爬虫模拟登录

在使用 Python 编写爬虫时&#xff0c;模拟登录是一个非常常见的需求&#xff0c;尤其是当你需要爬取需要身份验证的数据时。模拟登录通常需要以下步骤&#xff1a; 分析登录页面&#xff1a;确定提交登录请求的 URL 和相关参数。发送登录请求&#xff1a;模拟用户发送登录表单…

UE4 材质学习笔记09(雨水水坑着色器/完整雨水着色器)

一.雨水水坑着色器 要用到这样一个噪声贴图&#xff0c;我们要做的就是&#xff0c;做出水坑并让水坑在这种浑浊的噪点中产生&#xff0c;因此水坑将从最暗的斑点生长&#xff0c;然后随着它继续占据越来越亮的像素而生长 现在水坑将从上到下投射到世界空间中&#xff0c;所以…

macOS下的文件系统权限问题:从“Read-only”错误到解决实践20241019

macOS下的文件系统权限问题&#xff1a;从“Read-only”错误到解决实践 在 macOS 系统开发和运维的过程中&#xff0c;文件系统的权限问题是程序员常遇到的棘手问题之一。尤其是当你尝试在命令行中克隆 Git 仓库时&#xff0c;突然冒出的“Read-only file system”错误往往让人…

【OpenCV】(七)—— 滤波

OpenCV 中的滤波操作用于去除图像噪声&#xff0c;实现图像的平滑处理&#xff0c;改善图像质量或提取有用的信息。使用一张有噪声的图像作为示例 均值滤波 均值滤波是一种简单的线性滤波技术&#xff0c;通过将像素点周围邻域内的所有像素值取平均来达到平滑图像的效果&#…

golang一个轻量级基于内存的kv存储或缓存

golang一个轻量级基于内存的kv存储或缓存 go-cache是一个轻量级的基于内存的key:value 储存组件&#xff0c;类似于memcached&#xff0c;适用于在单机上运行的应用程序。 它的主要优点是&#xff0c;本质上是一个具有过期时间的线程安全map[string]interface{}。interface的结…