pandas 预处理

1.清除空值

如果我们要删除包含空字段的行,可以使用 dropna() 方法
DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)

  • axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。
  • how:默认为 ‘any’ 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how=‘all’ 一行(或列)都是 NA 才去掉这整行。
  • inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。

2.去除重复值

drop_duplicates()
keep: 可选参数有三个:‘first’、 ‘last’、 False, 默认值 ‘first’。其中:

  • first表示: 保留第一次出现的重复行,删除后面的重复行。
  • last表示: 删除重复项,保留最后一次出现。
  • False表示: 删除所有重复项。

subset : 接收string或sequence。表示进行去重的列。默认为None,表示全部列
inplace:布尔值,默认为False,是否直接在原数据上删除重复项或删除重复项后返回副本。

data={'A':['one','one','one','two','two','two'],
      'B':[1,1,2,1,1,2],
      'C':[1,2,3,4,5,6],
    
}
df=pd.DataFrame(data)
df

在这里插入图片描述

df.drop_duplicates('A')

在这里插入图片描述

df.drop_duplicates(['A','B'])

在这里插入图片描述

df.drop_duplicates(['A','B']).reset_index()

在这里插入图片描述

注意:drop_duplicates删除重复行时,行索引也会删除。需要重置索引
data.reset_index(drop=True)
获得新的index,原来的index变成数据列,保留下来。
不想保留原来的index,使用参数 drop=True,默认 False。

df.drop_duplicates(['A','B']).reset_index(drop=True)

在这里插入图片描述

3.修改异常值

    for x in n.index:
        if n.loc[x,'recently_logged'] == '--':
            n.loc[x, 'recently_logged'] = n.loc[x, 'register_time']
            
n.loc[n['recently_logged'] == '--', 'recently_logged'] = n.loc[n['recently_logged'] == '--', 'register_time']



# for x in df.index:
#     if df.loc[x, 'Sex'] == 'female':
#         df.loc[x,'Sex'] = 0
#     else:
#         df.loc[x,'Sex'] = 1
df.loc[df['Sex'] == 'female', 'Sex'] = 0
df.loc[df['Sex'] == 'male', 'Sex'] = 1


for x in df.index:
  if df.loc[x, "age"] > 120:
    df.drop(x, inplace = True)

4.判段是否非空


isnull() 判断各个单元格是否为空
查看数据整体的缺失值情况
isnull().sum()
在这里插入图片描述
可以指定指定空数据类型:
比如
missing_values=[“n/a”, “na”]

5.填充空值

fillna()

df.fillna(0)  # 用0填充空值

用均值填充空值

x = int(df["a"].mean())   
df["a"].fillna(x, inplace = True)

类似可以使用median()中位数,mode()众数
注意上面的int()或者根据需要改成float,不进行类型转换是pandas.core.series.Series无法填充
参数method:‘bfill’ 用缺失值后面的数填充缺失值
'ffill’用缺失值前面的数填充。

df.fillna(method='ffill', inplace=True)

原始数据点击提取码:pfnw
在这里插入图片描述第五行原本是缺失值,用前面的第四行填充了
在这里插入图片描述

(pima的数据来源在下面的github地址)
数据放到github上了
点击此处

6数据类型转换

  1. astype()强制转化数据类型
  2. 通过创建自定义的函数进行数据转化
  3. pandas提供的to_nueric()以及to_datetime()
import pandas as pd
import numpy as np
data={
    'x':[1,2,3,4,5],
    'y':['a','b','c','d',np.nan],
    'z':['12%','13%','24%','22%','44%'],
    'r':['2021','2022','2033','2012','2019'],
    'w':[11,22,33,44,'a']
}
df=pd.DataFrame(data)
df

在这里插入图片描述

df['x'].astype(float)  # 这样的操作并没有改变原始的数据框,而只是返回的一个拷贝
df['x']=df['x'].astype(float)
df['x'].dtype

在这里插入图片描述

def f(x):
    return x.replace('%','')
df['z']=df['z'].map(f)
df

在这里插入图片描述

df['sex']=['female','male','female','male','male']
print(df)
df['sex']=np.where(df['sex']=='female',1,0)
df

在这里插入图片描述

df['r']=pd.to_datetime(df['r'])
df['r'].dtypes

在这里插入图片描述

pd.to_numeric(df['w'],errors='coerce')

在这里插入图片描述to_numeric主要参数
arg : scalar(标量),list(列表),
(tuple)元组,一维数组(1-d array)或Series

errors : {‘ignore’,‘raise’,‘coerce’},
默认为’raise’如果为‘raise’,则无效的解析将引发异常如果为 ‘coerce’,则将无效解析设置为NaN如果为 ‘ignore’,则无效的解析将返回输入

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开始King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值