开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践:Pandas 数据预处理-中】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15389
Pandas 数据预处理-中
内容简介:
一、直接解决数据转换内容
二、Replacing Value(替换值)
三、Renaming Axis Indexes(重命名 Axis Indexes)
一、直接解决数据转换内容
可以直接用下面这个方法来解决数据转换的问题,
data[‘food’].map(lambda x: meat_to_animal[x.lower()])
0 pig
1 pig
2 pig
3 cow
4 cow
5 pig
6 cow
7 pig
8 salmon
Name: food,dtype:.object
直接在food上面把它解决掉,用map函数,然后里面用了一个lambda函数,x赋的每一列值,
使用map是一个很简便的方法,用于element-wise转换和其他一些数据清洗操作。
二、Replacing Value(替换值)
下一个数据转换的内容是替换值,其实fillna是一个特殊的替换操作,可以把空替换成0,1等等数字都可以。
Map可以用于修改一个object里的部分值,但是replace能提供一个更简单的和更灵活的的方法做到这个替换。
下面来看一下replace来替换这个值的方法:
data= pd.Series([1.,-999.,2.,-999.,-1000.,3.])// 这里是构建一个series,有这样几个值data
0 1.0
1 -999.0
2 2.0
3 -999.0
4 -1000.0
5 3.0
dtype:float64
这里-999可能是用来表示缺失值的标识符,不是用NA表示,是用-999来表示用NA来替代的话,用replace替换掉,会产生一个新series(除非使用inplace=True)
data.replace(-999, np.nan)//将-999替换掉nan0 1.0
1 NaN
2 2.0
3 NaN
4 -1000.0
5 3.0
dtype:float64
如果想要一次替换多个值,直接用一个list即可:
data.replace([-999, -1000],np.nan)//将-999和1000都替换成nan0 1.0
1 NaN
2 2.0
3 NaN
4 NaN
5 3.0
dtype:float64
对于不同的值用不同的替换值,也是导入一个list,示例如下:
data.replace([-999, -1000],[np.nan, 0])//将-999替换成nan,将1000替换成0
0 1.0
1 NaN
2 2.0
3 NaN
4 0.0
5 3.0
dtype:float64
参数也可以是一个dict:
data.replace(f-999:np.nan,-1000:0])
0 1.0
1 NaN
2 2.0
3 NaN
4 0.0
5 3.0
dtype:float64
三、Renaming Axis Indexes(重命名 Axis Indexes)
像是series里的value一样,axis label也能类似的是函数或映射来转换,产生一个新的object。当然也可以设置in-place不产生新的数据,示例如下:
data = pd.DataFrame(np.arange(12).reshape((3, 4)),
index=[‘Ohio’, ‘Colorado’, ‘New
York’],
columns=[‘one’, ‘two’, ‘three’, ‘four’])
Data
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
New York 8 9 10 11
与series相同,axis index有一个map方法:
transform = lambda x:x[:4].upper()
transform
<function __main___.<lambda>(x)>
data.index
Index([‘Ohio’, ‘Colorado’, ‘NewYork’], dty
‘object’)
data.index.map(transform)
Index([‘OHIO’, ‘COLO’, ‘NEW’) dty
‘object’)
可以赋值给index,以in-place的方式修改DataFrame:
data.index=data.index.map(transform)
data
构造数据框,可以看到0-11,分为3行4列,行是Ohio,Colorado
New York,列是one,two,three,four,
与series相同,axis index有一个map方法来进行转换出来:
定义transform是一个lambda函数,x里取1到4,把它变成大写
看一下他的transform,然后再看一下data里的index的索引,这
里的索引显示的是默认行的索引,将索引用map来映射一下,
transform是一个lambda函数。
可以赋值给index,以in-place的方式修改DataFrame:
data.index = data.index.map(transform)
data
one two three four
OHIO 0 1 2 3
COLO 4 5 6 7
NEW 8 9 10 11
如果想要创建一个转换后的版本,而且不用修改原始数据,可以用rename:
data.rename(index=str.title,columns=str.upper)
ONE TWO THREE FOUR
Ohio 0 1 2 3
Colo 4 5 6 7
New 8 9 10 11
注意:rename能用于dict一样的object,
data.rename{index=‘OHIO’: ‘INDIANA’},
columns=(‘three’: ‘pekaboo’])
one two pekaboo four
rename能让用户避免陷入手动赋值给index和columns的杂务中。可以用inplace直接修改原始数据:
data.rename{index=‘OHIO’:‘INDIANA’}, inplace=True)
dataone two three four