博客 Python简单数据清洗

Python简单数据清洗

   数栈君   发表于 2023-12-06 09:46  547  0

我们从网上爬取好的数据,看起来会很乱,我们需要对数据进行再次加工,筛选出我们需要的数据,此时就需要对数据进行清洗。

一点数据清洗对于后续的数据分析来说至关重要。Python中进行数据清洗的工具是Pandas。接下来我就来介绍一下如何使用Python简单地对凌乱的数据进行清洗。

首先我们需要以下从几个方面判断我们需要清洗的数据:

1、数据的完整性:检查数据是否有空值或缺失

2、数据的全面性:检查同类数据的单位是否是一致的,比如体重有Kg和g,身高有M和CM

3、数据的合法性:检查数据是否合法,如存在非ASCII码字符或者非法字符

4、数据的唯一性:检查数据是否有重复

考虑好这些问题后我们把需要清洗的内容列出一张清单,并按照清单进行清洗。

以下是实际清洗流程:

第一步,下载pandas包,可以使用pycharm->setting->python interpreter直接下载,也可以在终端输入pip3 install pandas下载

第二步,导包

import pandas as pd
from pandas import Series,DataFrame

第三步,开始清洗,示例代码如下:

import pandas as pd
from pandas import Series,DataFrame

def clean():
df = DataFrame(pd.read_excel('./cleantest.xlsx'))
#对列进行重命名
df.rename(columns={0:'姓名', 1:'性别', 2:'年龄',3:'体重',4:'身高'},inplace=True)
#对整行为空值的数据进行删除
df.dropna(how='all',inplace=True)
#使用平均值来填充体重缺失的值
df[u'体重'].fillna(int(df[u'体重'].mean()),inplace=True)
#对身高列的度量做统一,我们使用df.apply方法来统一身高的度量,使用df.columns.str.upper方法将首字母统一为大写
def format_height(df):
if(df['身高']<3):
return df['身高'] * 100
else:
return df['身高']
df['身高'] = df.apply(format_height,axis=1)
#2 姓名首字母大小写不统一,统一成首字母大写
df.columns = df.columns.str.upper()
#对姓名列的非法字符做过滤,我们可以使用df.replace方法,删除字母前面的空格,我们可以使用df.map方法
#1、英文字母出现中文->删除非ASCLL码的字符
df['姓名'].replace({r'[^\x00-\x7f]+':''},regex=True,inplace=True)
#2、英文名字出现了问号->删除问号
df['姓名'].replace({r'\?+':''},regex=True,inplace=True)
#3、名字前出现空格->删除空格
df['姓名'] = df['姓名'].map(str.lstrip)
#将年龄列为负值的年龄处理为正数,我们可以使用df.apply方法:
def format_sex(df):
return abs(df['年龄'])
df['年龄'] = df.apply(format_sex,axis=1)
#删除行记录重复的数据,我们可以使用df.drop_duplicates方法:
df.drop_duplicates(['姓名'],inplace=True)
#我们讲清洗好的数据保存至新的excel中,我们可以使用df.to_excel方法:
df.to_excel('./data02.xlsx',index=False)
if __name__ == '__main__':
clean()

pandas的一些常用方法:

1)从excel中加载数据到DataFrame,pandas.read_excel('文档位置')

2)对列进行重命名,rename

def rename(
self,
mapper: Renamer | None = None,
*,
index: Renamer | None = None,
columns: Renamer | None = None,
axis: Axis | None = None,
copy: bool = True,
inplace: bool = False,
level: Level | None = None,
errors: str = "ignore",
) -> DataFrame | None:

3)删除空值,dropna

def dropna(
self,
axis: Axis = 0,
how: str = "any",
thresh=None,
subset: IndexLabel = None,
inplace: bool = False,
):

4)填充值,fillna

def fillna(
self,
value: object | ArrayLike | None = None,
method: FillnaOptions | None = None,
axis=None,
inplace=False,
limit=None,
downcast=None,
) -> Series | None:
return super().fillna(
value=value,
method=method,
axis=axis,
inplace=inplace,
limit=limit,
downcast=downcast,
)

5)将首字母统一为大写,columns.str.upper

6) 过滤非法字符replace

def replace(
self,
to_replace=None,
value=lib.no_default,
inplace=False,
limit=None,
regex=False,
method: str | lib.NoDefault = lib.no_default,
):
return super().replace(
to_replace=to_replace,
value=value,
inplace=inplace,
limit=limit,
regex=regex,
method=method,
)

7) 删除空格,map

def map(self, arg, na_action=None) -> Series:
new_values = self._map_values(arg, na_action=na_action)
return self._constructor(new_values, index=self.index).__finalize__(
self, method="map"
)

8)将正负值转换,apply

def apply(
self,
func: AggFuncType,
axis: Axis = 0,
raw: bool = False,
result_type=None,
args=(),
**kwargs,
):
from pandas.core.apply import frame_apply

op = frame_apply(
self,
func=func,
axis=axis,
raw=raw,
result_type=result_type,
args=args,
kwargs=kwargs,
)
return op.apply().__finalize__(self, method="apply")

9)删除行记录重复的数据,drop_duplicates

def drop_duplicates(
self,
subset: Hashable | Sequence[Hashable] | None = None,
keep: Literal["first"] | Literal["last"] | Literal[False] = "first",
inplace: bool = False,
ignore_index: bool = False,
) -> DataFrame | None:

if self.empty:
return self.copy()

inplace = validate_bool_kwarg(inplace, "inplace")
ignore_index = validate_bool_kwarg(ignore_index, "ignore_index")
duplicated = self.duplicated(subset, keep=keep)

result = self[-duplicated]
if ignore_index:
result.index = default_index(len(result))

if inplace:
self._update_inplace(result)
return None
else:
return result

10)清洗好的数据保存至新的excel中,to_excel

第四步,去新的excel中查看数据是否清洗完成。

简单地数据清洗就介绍到这里了,经过清洗后的数据更加方便我们进行数据分析。
————————————————
版权声明:本文为CSDN博主「Popuessing's Jersey」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/CoCo629vanilla/article/details/126269530

免责申明:

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:
https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:
https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:
https://github.com/DTStack

0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群