pandas数据预处理初探:数据清洗、整备

本章节主要包含两个内容:1.缺失数据处理;2.重复数据处理;3. 数据替换和轴标签重命名;4.离散化-面元划分;5.异常值检测;6.排列和随机采样;7.字符串处理。
1.缺失数据处理

  1. )在pandas中,缺失数据以浮点值NaN表示,可以利用函数 data.isnull() 来判断,返回值为布尔型;
  2. )滤除缺失数据:data.dropna( ) # == data[data.notnull( )];
    dropna() 默认丢弃任何含有缺失值的行;
    dropna(how='all') 只丢弃全为NA 的行;
    dropna(axis=1,how='all') 丢弃全为NA的列;(axis=1意味:丢弃列索引及其数值)
    dropna(thresh = n) 丢弃NA值后,剩余参数的数量<n,则丢弃此行。
  3. )缺失数据填充:fillna( );即替换数组中的NA值,默认返回 新对象
    (1)data2=data.fillna(0) #以 0 填充替换NA值;
    (2)data.fillna(0,inplace=True) # 就地修改,原数组的NA值也被替换;
    (3)利用字典填充对应列的NA值:
    data.fillna({1:0.5,2:1}) # 数组第二列的NA值用0.5代替;第三列NA值用1代替;
    (4)data.fillna(method='ffill',limit=2) # 'ffill’前值填充,只填充前2个出现的NA值;
    (5)data.fillna(data.mean()) # 均值填充,(此处均值为非NA值统计得到的均值)。

2.重复数据处理

  1. )重复数据的判断: data.duplicated() #每行返回布尔型,判断是否存在重复行;
  2. ) 重复数据的移除: data.drop_duplicated() # 去掉重复行,返回移除后的数组,默认保留的为重复行中第一个出现的行;
    data.drop_duplicated(['k1','k2'], keep='last') # 依据k1、k2列来判断重复行,并删除,保留重复行中最后出现的行;

3 数据和轴标签替换

  1. data.replace(-999,np.nan) # 数据单个替换,-999的值全部替换为NaN,无效值;
  2. )多个值替换:data.replcae([-999,1000],[np.nan,0]);
    data.replace({-999:np.nan,1000:0}) # 针对不同的值,替换为特定值;
  3. )轴标签替换:
    (1)标签直接命名:data.index=[]; data.columns=[];
    (2)rename函数:data.rename(index = str.title,columns = str.upper) # 行标签更改为标题格式;列标签更改为大写格式;
    data.rename(index={'a':'1'},columns={'three':'3'},inplace=True) # 行索引‘a’更改为数字1,‘three’更改为数字3,在原数组上修改。

4 离散化-面元划分(数据规整)

  1. )cut函数:
    先定义面元,bins=[18,30,50,80,100]
    再进行面元划分和区间判断,cats=pd.cut(ages,bins,right=False) 划分的区间为[ ),开闭区间通过right参数设置;输出ages中,各参数所属的面元区间[ , );
    (1)pd.value_count(cats)pd.cut( )在各面元中各计数的结果;
    (2)cats.code 输出ages中各元素所属面元,以0,1,2……代表各bins面元区间的序号;
    (3)给各面元区间添加标签pd.cut(ages,bins,labels=['a','b','c','d']),以变量 a,b,c,d命名四个区间,并输出ages中各面元所属区间的标签;
    (4)针对数据分割一定个数的等长区间pd.cut(data,4,precision=2),表示以data的最大最小值分割等长的4个区间,且精确到2位小数,返回data中每个数所属面元。
  2. )qcut函数:
    (1)依据样本分位数进行面元划分,得到样本数量基本相等的面元; cats=pd.qcut(data,4) # 按4 分位数划分样本数据data。(与cut函数不同)
    (2) 可以自定义面元区间:pd.qcut(data,[0,0,1,0.5,0.8,1]).

5 异常值检测过滤

  1. )在dataframe数组中,寻找一定条件的行:
    col=data[2] # data的第三列;
    col[np.abs(col) > 3] # 判断第二列中,绝对值大于3的行,并返回行序号和数值(col);
    data[np.abs(col) > 3] # 判断第二列中,绝对值大于3的行,并返回此行的缩影元素(data);

6 排列和随机采样

  1. )随机重排:
    (1) order=np.random.permutation(df.index); 随机排列数组的行索引
    (2)利用iloc( )函数、take( )函数,对行、列重排:
    df.take(order,axis=0),行重排; df.take(order,axis =1) ,列重排
    df.iloc(order,:) ,行重排 df.iloc(:,order),列重排

  2. )随机采样:
    (1)df.sample(n=3) 随机选取数据,形成随机子集。

7 字符串处理

  1. )字符串拆分:split( )
    data.split(',') # 依据逗号分隔字符串,且去掉逗号;
  2. )去除空白符:strip( )
    new=[x.strip( ) for x in data.split(',')] # 在字符串拆分的基础上,去掉各拆分字符内的空白符;
  3. )利用::连接多个字符串
    '::'.join(pie) # 以符号 ‘::’ 连接pie中的字符串
    ':'.join(pie)
  4. )字符串定位
    (1)'b' in data # 返回布尔型数值,是否包含字符‘b’;
    (2) data.index(',') # 返回值为1,则包含字符串;不包含,报错
    (3)data.find('') # 返回值为1和-1,分别代表包含和不包含;
  5. )字符串次数统计
    data.count(',') # 统计‘,’的出现次数
  6. )字符替换
    data.replace(',',':') # 以 ‘:’ 替换字符串中的 ‘,’;
    还可以用空白代替字符,实现删除:
    data.replace(',','') # 删除
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值