数据清洗与准备

1 处理缺失值

1.1  过滤缺失值:dropna()

 

1.2  补全缺失值:fillna()

 

1.3 数据转换

1.3.1 删除重复值

①duplicated方法返回的是一个布尔值series;

②drop_duplicates返回的是DataFrame,内容是duplicated返回数组中为False的部分;

注释:duplicated和drop_duplicates默认都是保留第一个观测到的值;

DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
#参数

#subset: 列标签,可选
#keep: {‘first’, ‘last’, False}, 默认值 ‘first’
#first: 删除第一次出现的重复项。
#last: 删除重复项,除了最后一次出现。
#False: 删除所有重复项。
#inplace:布尔值,默认为False,是否删除重复项或返回副本
#返回:	重复数据删除 : DataFrame

 

1.3.2 使用函数或映射进行数据转换

series的map方法接收一个函数或一个包含映射关系的字典型对象;

map()的原型是map(function, iterable, …),它的返回结果是一个列表。

参数    function:  传的是一个函数名,可以是python内置的,也可以是自定义的。 就像上面的匿名函数lambda
参数    iterable:   传的是一个可以迭代的对象,例如列表,元组,字符串这样的。

这个函数的意思就是将function应用于iterable的每一个元素,结果以列表的形式返回。注意到没有,iterable后面还有省略号,意思就是可以传很多个iterable,如果有额外的iterable参数,并行的从这些参数中取元素,并调用function。如果一个iterable参数比另外的iterable参数要短,将以None扩展该参数元素。还是看例子来理解吧!

a=(1,2,3,4,5)
b=[1,2,3,4,5]
c="lh"
 
la=map(str,a)
lb=map(str,b)
lc=map(str,c)
 
print(la)
print(lb)
print(lc)
'''
['1', '2', '3', '4', '5']
['1', '2', '3', '4', '5']
['l', 'h']
'''
def add(x,y,z):
    return x,y,z
 
list1 = [1,2,3]
list2 = [1,2,3,4]
list3 = [1,2,3,4,5]
res = map(add, list1, list2, list3)
print(res)
 
'''
[(1, 1, 1), (2, 2, 2), (3, 3, 3), (None, 4, 4), (None, None, 5)]
'''

1.3.3 替代值 replace

 

str = 'abcdef'
str.replace(old,new,[max])
#方法用于字符串的修改,将字符串str中的字符old替换为 新的new字符串,max是可选参数,可以写也可以不写,不写的情况下,表示将str中所有的old替换为new,写之后表示最大替换次数。最后将修改后的字符串给返回,他是有返回值的 
 
str= 'abcdef'
print(str.replace('abc','AAA')) 
'''
AAAdef
'''

也可以通过如下形式进行替换:

import pandas as pd 
import numpy as np
data=pd.Series([1.,-999.,2.,-999,-1000.,3.])
print(data)
'''
0       1.0
1    -999.0
2       2.0
3    -999.0
4   -1000.0
5       3.0
dtype: float64
'''
#1
data.replace(-999,np.nan)
'''
0       1.0
1       NaN
2       2.0
3       NaN
4   -1000.0
5       3.0
dtype: float64
'''

#2.多个值需要替换,可以使用列表
data.replace([-999,-1000],np.nan)
'''
0    1.0
1    NaN
2    2.0
3    NaN
4    NaN
5    3.0
dtype: float64
'''
#3.可以通过字典传递
data.replace({-999:np.nan,-1000:0})
'''
0    1.0
1    NaN
2    2.0
3    NaN
4    0.0
5    3.0
dtype: float64
'''

1.3.4 重命名轴索引 rename

import pandas as pd
import numpy as np 
data=pd.DataFrame(np.arange(12).reshape(3,4),
                  index=['Ohio','Colorado','New York'],
                  columns=['one','two','three','four'])
print(data)
'''
          one  two  three  four
Ohio        0    1      2     3
Colorado    4    5      6     7
New York    8    9     10    11
'''
#方法1:使用map映射
transform=lambda x: x[:4].upper()

data.index.map(transform)
'''
Index(['OHI', 'COL', 'NEW'], dtype='object')
'''
data.index=data.index.map(transform)
'''
      one  two  three  four
OHIO    0    1      2     3
COLO    4    5      6     7
NEW     8    9     10    11
'''
#方法2:使用rename
data.rename(index=str.title,columns=str.upper)
'''
          ONE  TWO  THREE  FOUR
Ohio        0    1      2     3
Colorado    4    5      6     7
New York    8    9     10    11
'''

#rename 可以结合字典对象使用
data.rename(index={'Ohio':'OHIO'},
            columns={'four':'FORE'})
'''
          one  two  three  FORE
OHIO        0    1      2     3
Colorado    4    5      6     7
New York    8    9     10    11
'''
#如果要修改原有的数据集,inplace=True
data.rename(index={'Ohio':'OHIO'},
            columns={'four':'FORE'},inplace=True)

13.5 离散化和分箱. cut qcut

import pandas as pd
import numpy as np 

ages=[20,22,25,27,21,23,37,31,61,45,41,32]

bins=[18,25,35,60,100]

cats=pd.cut(ages,bins)
print(cats)
#返回的对象是一个Categorical对象。
'''
[(18, 25], (18, 25], (18, 25], (25, 35], (18, 25], ..., (25, 35], (60, 100], (35, 60], (35, 60], (25, 35]]
Length: 12
Categories (4, interval[int64]): [(18, 25] < (25, 35] < (35, 60] < (60, 100]]
'''
pd.value_counts(cats)
'''
(18, 25]     5
(35, 60]     3
(25, 35]     3
(60, 100]    1
dtype: int64
'''
#可以添加right=False来改变哪一边是封闭
pd.cut(ages,[18,25,35,60,100],right=False)
'''
[[18, 25), [18, 25), [25, 35), [25, 35), [18, 25), ..., [25, 35), [60, 100), [35, 60), [35, 60), [25, 35)]
Length: 12
Categories (4, interval[int64]): [[18, 25) < [25, 35) < [35, 60) < [60, 100)]
'''
#可以通过向labels选项传递一个列表或数组来传入自定义的箱名
group_names=['Youth','YoungAdult','MiddleAged','Senior']
pd.cut(ages,bins,labels=group_names)
'''
[Youth, Youth, Youth, YoungAdult, Youth, ..., YoungAdult, Senior, MiddleAged, MiddleAged, YoungAdult]
Length: 12
Categories (4, object): [Youth < YoungAdult < MiddleAged < Senior]
'''

1.3.5 检测和过滤异常值 describe

1.3.6 创建哑变量 get_dummies

 

1.4 字符串操作

1.4.1 内建字符串方法

1.4.2 正则表达式

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值