【pandas之数据清洗和处理和空值处理】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

待处理表格
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、Pandas对缺失值的处理

Pandas使用这些函数处理缺失值:
1、·isnull和notnull:检测是否是空值,可用于df和series·
2、dropna:丢弃、删除缺失值3个参数
a.axis:删除行还是列,{0 or 'index’,1 or ‘columns’}, default 0
b.how:如果等于any则任何值为空都删除,如果等于all则所有值都为空才删除
c。inplace:如果为True则修改当前df,否则返回新的df
提示:df2=df2.drop(df2[df2['c']==1.0].index)删除满足c=1的行
3、fillna:填充空值
d.value:用于填充的值,可以是单个值,或者字典(key是列名,value是值)
e.method:等于ffill使用前一个不为空的值填充forwordfill;等于bfill使用后一个不为空的值填充backword fill
f.axis:按行还是列填充,{0 or ‘index,1 or’columns’}
g.inplace:如果为True则修改当前df,否则返回新的df

二、使用步骤

0.数据处理

代码如下(示例):

df=pd.read_excel(r"C:\Users\lenovo\Desktop\b.xls",skiprows=2)
#skiprows参数是为了跳过两个空行
df

在这里插入图片描述

1.空值处理

df.isnull()
df["分数"].isnull()
df["分数"].notnull()
#筛选出没有空分数的所有列
df.loc[df["分数"].notnull(),:]

在这里插入图片描述

2.删除全是空值的行和列

代码如下(示例):

df.dropna(axis="columns",how='all',inplace=True)#删除空列
df.dropna(axis="index",how='all',inplace=True)#删除空行
df

在这里插入图片描述

3.填充空值

代码如下(示例):

#分数为空的填充为0
df.fillna({"分数":0})
#等同于
df.loc[:,'分数']=df['分数'].fillna(0)
df

在这里插入图片描述

3.补全姓名

使用前面的有效值填充,用ffill forward fill:

df.loc[:,'姓名']=df['姓名'].fillna(method="ffill")
df

4.保存数据

df.to_excel(r"C:\Users\lenovo\Desktop\a.xls",index=False)

三、实例清洗买船票数据

0.原始数据

在这里插入图片描述

1.代码

代码如下(示例):

import pandas as pd
import numpy as np
fpath=r"F:\code\python\pandas\test.csv"
df=pd.read_csv(fpath)
df.head()
#1、删除无用列
#df.drop(columns="unnamed",inplace=True)
#删除两列
df.drop(columns=["unnamed","pclass"],inplace=True)
df.head()
#2、类型转换
#info函数查询每列的类型,以及是否有空值等情况
#df.info()
#将id变成str类型
df['passenger']=df["passenger"].astype("str")
df["onboardtime"]=df["onboardtime"].astype("datetime64")
df.info()
#删除重复行
df.duplicated(keep=False)
df["passenger"].value_counts()
#keep=False 将所有相同都视为重复值,这样可以筛选出所有的重复行
df[df.duplicated(keep=False)]
#下面是默认保留第一行,这种不会出现所有重复行,是出现第二个以后的重复行
df[df.duplicated()]
#删除重复列,保留第一次出现的列
df.drop_duplicates(keep="first",inplace=True)
#删除后,索引重排后保留drop=True
df.reset_index(drop=True)
df
#4、缺失值处理
df["age"].unique()
df['age']=df['age'].replace('-',np.NaN).replace('na',np.NaN)
df['age'].fillna(df["age"].median(),inplace=True)
df["age"]=df["age"].astype('float64')
#5、数据映射
df["sex"].unique()
df["sex"]=df["sex"].str.lower()
df["sex"]=df["sex"].map({
     "male":"male",
    "m":"male",
    "f":"female",
    "fe":"female",
    "female":"felmale"
})
df["sex"].unique()
#6、字符串拆分
#只要登船日期,不要具体的时间
df.head()
df["onboarddate"]=df["onboardtime"].apply(lambda x:str(x)[0:10])
df

在这里插入图片描述

总结

加油

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值