码迷,mamicode.com
首页 > 其他好文 > 详细

pandas 数据处理

时间:2019-07-03 00:29:39      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:value   dataframe   class   处理   keep   接受   新建   panda   薪资   

#

1 删除重复元素

使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True

- keep参数:指定保留哪一重复

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
#手动将df的某几行设置成相同的内容
df = DataFrame(data=np.random.randint(0,100,size=(8,4))) #创建df
df.iloc[1] = [33,33,33,33]
df.iloc[3] = [33,33,33,33]
df.iloc[6] = [33,33,33,33]
- 使用duplicated查看所有重复元素行
df.loc[~df.duplicated(keep=last)] #保留正常值
df.drop_duplicates(keep=last,inplace=True) #函数删除重复的行  映射原数据 修改原df

 

2 映射

DataFrame替换操作  replace
- 单值替换
    - 普通替换:  替换所有符合要求的元素:to_replace=15,value=e
    - 按列指定单值替换: to_replace={列标签:替换值} value=value
    
- 多值替换
    - 列表替换: to_replace=[]  value=[]
    - 字典替换(推荐)  to_replace={to_replace:value,to_replace:value}
技术图片
replace 代替
s = Series(data=[3,4,5,6,7,8])
s.replace(3,s) #新数据    原数据不变
s.replace([4,5],[sx,zc]) #多值替换
replace参数说明:

method:对指定的值使用相邻的值填充替换
limit:设定填充次数
series
技术图片
df #dataframe
df.replace(33,three3) #新数据  原数据不变
注意:DataFrame中,无法使用method和limit参数
df.replace(to_replace={46:one})  #dict 形式
df.replace(to_replace={1:33},value=TT) # 
dataframe
映射
map()函数:新建一列 , map函数并不是df的方法,而是series的方法
- map()可以映射新一列数据 - map()中可以使用lambda 表达式 - map()中可以使用方法,可以是自定义的方法 eg:map({to_replace:value}) - **注意** map()中不能使用sum之类的函数,for循环
技术图片
dic = {
    name:[jay,jj,Liho],
    salary:[2000,3000,4000]
}
df = DataFrame(dic)  #字典作为数据源
dic={
    jay:杰伦,
    jj:林俊
}
df[c_name]=df[name].map(dic)  #增加了一列  中文名字  series的方法
df  #查看

计算税后薪资?  缴纳50%的税
def after_shui(s):
    if s<=2000:
        return s
    else:
        return s-(s-2000)*0.5
df[shuihou] = df[salary].map(after_shui)   #lambda表达式也行
df

注意:并不是任何形式的函数都可以作为map的参数。只有当一个函数具有一个参数且有返回值,那么该函数才可以作为map的参数
map 映射

3 使用聚合操作对数据异常值检测和过滤

使用df.std()函数可以求得DataFrame对象每一列的标准差
    创建一个1000行3列的df 范围(0-1),求其每一列的标准差
df = DataFrame(data=np.random.random(size=(1000,3)),columns=[A,B,C]) #columns 列索引设置
df
#对df应用筛选条件,去除标准差太大的数据:假设过滤条件为 C列数据大于两倍的C列标准差
std_twice = df[C].std()*2  #2倍标准差值
hangs = ~(df[C]>std_twice)
df.loc[hangs] #过滤掉了异常值

#异常值赋值空 
df.loc[df[C]>std_twice,C]=np.nan
df.fillna(axis=0,method=ffill).fillna(axis=0,method=bfill)  #新数据 填充数据
df.fillna(axis=0,method=‘ffill‘,inplace=‘True‘) #原数据基础上修改了
df.fillna(axis=0,method=‘bfill‘,inplace=‘True‘) #进一步修改

4 排序

使用.take()函数排序
    - take()函数接受一个索引列表,用数字表示,使得df根据列表中索引的顺序进行排序
    - eg:df.take([1,3,4,2,5])  #要被排序的索引  轴向
可以借助np.random.permutation()函数随机排序
df.take([2,1,0],axis=1) #排序了
df #原顺序不变
np.random.permutation(x)可以生成x个从0-(x-1)的随机数列
random_df = df.take(np.random.permutation(3),axis=1).take(np.random.permutation(1000),axis=0) #1列  0行
random_df[0:100]  #切片100个数据

5 数据分类处理(重点)

 

pandas 数据处理

标签:value   dataframe   class   处理   keep   接受   新建   panda   薪资   

原文地址:https://www.cnblogs.com/zhangchen-sx/p/11123819.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!