133、panda操作——数据转换及函数映射
2018-01-27 本文已影响0人
陈容喜
panda操作——数据转换
DataFrame对象中常常出现重复行,可以使用duplicated方法返回一个布尔型Series,表示各行是否重复: 1.png 使用drop_duplicates方法,返回一个移除重复行的DataFrame: 2.png 指定部分列进行重复项判断: 3.png duplicated和drop_duplicates默认保留第一个出现的值组合,传入keep='last'则保留最后一个: 4.png利用函数或映射进行数据转换
在对数据进行转换时,需要根据数组、Series或DataFrame列中的值来实现转换工作。例如下面一组有关肉类的数据: 5.png 编写一个肉类到动物的映射: 6.png 采用Series的map方法接受一个函数或含有映射关系的字典对象,因肉类的首字母有的大写有的小写,需要使用lower把各个值转换为小写: 7.png 传入一个能够完全映射食物和来源的函数: 8.png源码:
# coding: utf-8
# ### 移除重复数据
# In[1]:
import numpy as np
from pandas import Series,DataFrame
import pandas as pd
# In[2]:
# 先读取一个excel文件
xls_file = 'D:\\Python\\notebook\\D8 AJ.xlsx'
dataXls = pd.read_excel(xls_file)
print(dataXls)
# In[3]:
# 使用duplicated方法返回一个布尔型Series,表示各行是否重复
dataXls.duplicated()
# In[4]:
# 使用drop_duplicates方法返回一个移除重复犯的DataFrame
dataXls.drop_duplicates()
# In[5]:
# 指定PIN 1列过滤重复项
dataXls['v1'] = range(7)
dataXls.drop_duplicates(['PIN 1'])
# In[6]:
'''
duplicated和drop_duplicates默认保留第一个出现的值组合,
传入keep='last'则保留最后一个
'''
dataXls.drop_duplicates(['PIN 1','PIN 2'],keep='last')
# ### 利用函数或映射进行数据转换
# In[7]:
# 建立有关肉类的数据
data = 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]})
print(data)
# In[8]:
# 编写一个肉类到动物的映射
meat_to_animal = {
'bacon':'pig',
'pulled pork':'pig',
'pastrami':'cow',
'corned beef':'cow',
'honey ham':'pig',
'nova lox':'salmon'
}
# In[9]:
# 采用Series的map方法接受一个函数或含有映射关系的字典对象
data['animal'] = data['food'].map(str.lower).map(meat_to_animal)
print(data)
# In[10]:
# 传入一个能够完全映射食物和来源的函数
data['food'].map(lambda x: meat_to_animal[x.lower()])