pandas模块-去重-函数与映射-替换值
导入模块:
import numpy as npimport pandas as pdfrom pandas import Series,DataFramefrom numpy import nan as NA
1.去重
创建有重复的数据
df1 = DataFrame({\'k1\':list(\'aaabbbbccc\'),\'k2\':[1,1,2,2,3,3,3,4,2,1]},index=list(\'ABCDEFGHIJ\'))df1
之前学的方法
df1.k1.unique()
(1)通过 xxx.duplicated() 返回一个 是否是 重复数据的布尔序列
df1.k1.duplicated()
返回非重复的索引及其值
df1.k1[~df1.k1.duplicated()]
对重复值和非重复值技术
df1.k1.duplicated().value_counts()
(2)Series.drop_duplicates(keep=‘first’, inplace=False)
因为df1.k1取出来就是一个Series,所以这里直接用df1.k1
df1.k1.drop_duplicates()
df1.k1.drop_duplicates(keep=\'last\')
(3)DataFrame.drop_duplicates(subset=[ ] ,keep=‘first’ ,inplace = ‘False’)
参数:
subset = [列1,列2,…] 默认所有列相同的才丢掉,
keep=‘first’ 保留重复值的第一个index,
inplace = ‘False’ 不在原值去除
df1.drop_duplicates()
df1.drop_duplicates(subset=[\'k1\'])
df1.drop_duplicates(subset=[\'k2\'])
2.函数映射
创建一个DataFrame
df2 = DataFrame({\'nickname\':list(\'ABcd\'),\'unit\':[2,4,6,8]})df2
(1)已知 上述 abcd对应四种 动物 的简称。现在有个 字典中有四种,把四种动物增加到新列,首字母进行匹配
#先创建一个字典里面是abcd对应的动物名称animal = {\'b\':\'belt\',\'c\':\'cycle\',\'d\':\'donkey\',\'a\':\'ant\'}#先用函数将df2中的nickname列的值全转为小写df2.nickname.apply(lambda x:x.lower())#生成一个新列里面的值都是abcd对应的动物名称duiying=df2.nickname.apply(lambda x:animal[x.lower()])duiying#将新列加入df2df2[\'animal\']=duiyingdf2
(2)也可以用map()Series即可以使用apply操作与一列,也可以用map()操作于每个值
df2.nickname.map(str.lower)
3.替换值
先创建一个Series
s2 = Series([1,-999,100,-999,10,-1000,10,1000])s2
(1)将一个或多个值换成一个值
以前学的方法
s2.apply(lambda x:NA if x==-999 else x)
将一个值换成 NA
s2.replace(-999,NA)
将多个值换成一个值
s2.replace([-999,-1000],6666)
(2)将多个值换成多个值
方法1:
s2.replace([-999,-1000],[6666,7777])
方法2
s2.replace({-999:666,-1000:777})