去除重复数据
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
的来源是哪个动物
- 分步书写
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中的对应键值
- 精简写法
以上过程可以用一个式子表示
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
轴索引重命名
-
index
和map
结合 -
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'})#行和列标签修改