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 正则表达式