python数据分析数据清洗,用python进行数据清洗
数据科学家80%的时间花在清理任务上?
将数据清理规则总结为四个要点:“完全集成”
完整性:单个数据中是否存在空值,统计字段是否完善。
全面性:观察一列的所有值。例如,如果我们在Excel中选择一列,我们可以看到该列的平均值、最大值和最小值。我们可以通过数据定义、单位标识、数值本身等常识来判断这个栏目是否有问题。
合法性:数据类型、内容和大小的合法性。比如数据中有非ASCII字符,性别未知,年龄超过150岁。
唯一性:数据是否存在重复记录,因为数据通常来自不同渠道的汇总,重复是常见的。行和列数据需要是唯一的。比如一个人不能重复记录,一个人的体重不能在列指标中重复记录。
1完整性
问题1:缺少值
一些年龄和体重值丢失,但这些值没有被收集。通常使用三种方法:
删除:删除缺少数据的记录。
平均值:使用当前列的平均值。
高频:使用当前列频率最高的数据。
想要用平均年龄填充DF [age]中缺少的值:
df[年龄]。菲尔娜(df[年龄]。平均值(),原地=真)
用最高频率的数据填充。可以通过value_counts获取年龄字段的最高频率age_maxf,然后用Age _ maxf填充年龄字段中缺失的数据:
age_maxf=train_features[Age]。value_counts()。索引[0]
train_features[Age]。fillna(age_maxf,inplace=True)
问题2:空行
读入数据后需要使用dropna()对数据进行处理,删除空行。
#删除所有空行
df.dropna(how=all ,inplace=True)
2全面性
问题:列数据的单位不统一。
使用千克作为计量单位,将磅转换成千克。
#在重量数据栏中获取以磅为单位的数据
rows _ with _ lbs=df[ weight ]. str . contains( lbs )。菲尔娜(假)
打印df[行数和磅数]
#将磅转换为千克,2.2磅=1千克
对于I,df中的lbs _ row[rows _ with _ lbs]。iterrows():
#截取开头到最后三个字符,即去掉lbs。
weight=int(float(lbs _ row[ weight ][:-3])/2.2)
df.at[i, weight]={}kgs 。格式(重量)
3合理性
问题:非ASCII字符
或者删除或替换来解决非ASCII问题。
#删除非ASCII字符
df[名字]。replace({r[^\x00-\x7F] :},regex=True,inplace=True)
df[姓氏]。replace({r[^\x00-\x7F] :},regex=True,inplace=True)
4独特性
问题1:一个列有多个参数。
姓名列(姓名)有两个参数:名字姓氏。将姓名列拆分为两个字段:名字姓氏。使用split方法str.split(expand=True)将列表拆分为一个新列,并删除原来的name列。
#拆分名称并删除源数据列。
df[[名字,姓氏]]=df[名字].str.split(expand=True)
df.drop(name ,axis=1,inplace=True)
问题2:重复数据
如果存在重复记录,请使用drop_duplicates()删除重复数据。
#删除重复的数据行
df.drop_duplicates([名字,姓氏],inplace=True)
练习:
清洁食品数据:
食物
盎司
动物
培根
4.0
猪
手撕猪肉
3.0
猪
培根
圆盘烤饼
猪
熏牛肉
6.0
母牛
罐装咸牛肉
7.5
母牛
培根
8.0
猪
五香烟熏牛肉
-3.0
母牛
蜂蜜火腿
5.0
猪
新lox
6.0
鲑
进口熊猫作为pd
用熊猫清理食物数据
#读取csv文件
df=pd.read_csv(c.csv )
Df [食物]=df [食物]。str.lower () #是小写字母。
Df.dropna(inplace=True) #删除缺少数据的记录
Df [盎司]=df [盎司]。Apply (lambda A: ABS (a)) #负值不合法,取绝对值。
#找到食物的重复记录,将它们分组以找到它们的平均值。
d_rows=df[df[food]。重复(keep=False)]
g_items=d_rows.groupby(food )。平均值()
g_items[food]=g_items.index
打印(g_items)
# Traversal将重复食物的平均值分配给df
对于I,g_items.iterrows()中的row:
df.loc[df.food==row.food, ounces]=row.ounces
df . drop _ duplicates(in place=true)#删除重复记录
Df.index=range(len(df)) #重置索引值
打印(df)
或者
朱皮特笔记本,python3
进口熊猫作为螺纹中径
df=PD。read _ CSV(r d://Data _ for _ sci/food。CSV’)
df。索引
df
#小写的数据清理
df[食物]=df[食物]。海峡。下部()
df
# Delet NaN
df=df.dropna()
df.index=range(len(df)) #重置索引
df
#得到培根的平均值,删除第二个
df.loc[0,盎司]=df[df[食物]。isin([培根])]。mean()[盎司]
df.drop(df.index[4],inplace=True)
df.index=range(len(df)) #重置索引
df
#获取熏牛肉的平均值并删除第二个平均值
df.loc[2,盎司]=df[df[食物]。isin([熏牛肉])]。mean()[盎司]
df.drop(df.index[4],inplace=True)
df.index=range(len(df)) #重置索引
df
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。