《利用Python进行数据分析》笔记 第七章 数据清洗(2)数据转换1:去除重复数据、利用函数或映射进行转换、数据替换、轴索引重命名

去除重复数据

duplicated方法返回一个布尔型Series,用来表示各行是否重复

drop_duplicates方法返回一个DataFrame,把重复的行给去掉

以上两个方法默认判断所有列,每列都相同的行才会被删除。也可以指定进行重复项判断的列。

参数keep=last保留最后一个重复行而不是第一个

data = pd.DataFrame({'k1':['one','two'] * 3 + ['two'],
                     'k2':[1,1,2,3,3,4,4]})
data.duplicated()
data.drop_duplicates()
data.drop_duplicates(['k1'])#指定'k1'列进行重复判断,只保留最先出现的'one'和'two'行
data.drop_duplicates(['k1'],keep='last')

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

利用函数或映射进行数据转换

案例:data表示原数据,想将meat_to_meal附加到data后面,用来表示food的来源是哪个动物

  1. 分步书写

data字典中的'food键'对应值有大小写,因此需要先用Series的str.lower方法统一转换为小写

map用法有:

​ ①传入一个字典,如果字典中有与原Series相同的键,则拼到对应的键后面,否则不添加。

​ ②传入一个元素级函数(能够处理的精度到单个数据而非一整行或一整列的函数称为元素级函数),对原 Series中每个数据都进行处理

data = pd.DataFrame({'food': ['bacon', 'pulled pork', 'bacon',
                              'Pastrami', 'corned beef', 'Bacon',
                              'pastrami', 'honey ham', 'nova lox'],
                    'ounces': [4, 3, 12, 6, 7.5, 8, 3, 5, 6]})

meat_to_animal = {
'bacon': 'pig',
'pulled pork': 'pig',
'pastrami': 'cow',
'corned beef': 'cow',
'honey ham': 'pig',
'nova lox': 'salmon'
}

lowerCased = data['food'].str.lower()#’food‘中元素转为小写
data['animal'] = lowerCased.map(meat_to_animal)#附加一个'animal'列,每行内容是meat_to_animal中的对应键值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 精简写法

以上过程可以用一个式子表示

data['food'].map(lambda x:meat_to_animal[x.lower()])

注释:

①lambda一般在python需要用函数作为参数的地方使用

​ 语法:lambda arguments: expression 其中arguments是函数的参数,可以是零个或多个参数,用 逗号分隔。expression是函数的返回值表达式。

​ 上述式子x为元素级输入,x.lower()表示将每个x都变为小写 meat_to_animal[x.lower()]表示返回 meat_to_animal字典中x.lower()对应的值

②map表示将每个元素都应用lambda函数进行处理

替换值

replace方法,其中第一个参数表示被替换的值,第二个参数表示用于替换的值,有以下几种形式:

①传入个数据和单个替换值,该数据被替换

②传入一个列表和单个替换值,列表元素被替换值替换

③传入一个列表和替换值列表,列表需要一 一对应,对应的值替换

data = pd.Series([1.,-999.,2.,-999.,-1000.,3.])
data.replace(-999,np.nan)#用NA替换-999
data.replace([-999,-1000],np.nan)#用NA替换-999和-1000
data.replace([-999,-1000],[np.nan,0])#用NA替换-999,用0替换-1000

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

轴索引重命名

  1. indexmap结合

  2. rename不修改原数据,返回一个数据集的转换版本.

    str.title将每个单词首字母大写,str.upper将每个单词所有字母大写.

rename传入字典可以只修改部分轴索引名,inplace=True参数可原地修改

data = pd.DataFrame(np.arange(12).reshape((3,4)),
                    index=['Ohio','Colorado','New York'],
                    columns=['one','two','three','four'])

transform = lambda x:x[:4].upper()#取每个数据的前四个字符并大写

data.index.map(transform)#index和map结合修改

data.rename(index=str.title,columns=str.upper)#行标签改为title型,列标签改为upper型
data.rename(index={'OHIO':'INDIANA'},columns={'three':'peekaboo'})#行和列标签修改

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值