博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pandas 数据处理
阅读量:4983 次
发布时间:2019-06-12

本文共 4041 字,大约阅读时间需要 13 分钟。

#

1 删除重复元素

使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True- keep参数:指定保留哪一重复import numpy as npimport pandas as pdfrom pandas import Series,DataFrame#手动将df的某几行设置成相同的内容df = DataFrame(data=np.random.randint(0,100,size=(8,4))) #创建dfdf.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 #dataframedf.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.5df['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.nandf.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 数据分类处理(重点)

from pandas import DataFrame,Seriesdf = DataFrame({
'item':['Apple','Banana','Orange','Banana','Orange','Apple'], 'price':[4,3,3,2.5,4,2], 'color':['red','yellow','yellow','green','green','green'], 'weight':[12,20,50,30,20,44]})df #数据展示df.groupby('item').groups #分组结果 # df.groupby('item').mean() # 均值mean_price = df.groupby('item')['price'].mean() # 指定字段均值 减少计算成本dic = mean_price.to_dict() #返回字典 映射关系表df['mean_price']= df['item'].map(dic) #映射回原数据 增加了一列df #dataframe的展示#颜色查看各种颜色的水果的平均价格 color_mean_price = df.groupby('color')['price'].mean() #先颜色分组 求均值dic = colo_mean_price.to_dict() #转格式字典 df['colo_mean_price']=df['color'].map(dic) #映射数据 增加列df # 查看数据

6 高级数据聚合

使用groupby分组后,也可以使用transform和apply提供自定义函数实现更多的运算    df.groupby('item')['price'].sum() <==> df.groupby('item')['price'].apply(sum)    transform和apply都会进行运算,在transform或者apply中传入函数即可    transform和apply也可以传入一个lambda表达式
自定义函数/方法def fun(s): #复数  []  ()    sum = 0    for i in s:  #遍历[]  ()        sum+=s    return sum/s.size  #求均值#使用apply函数求出水果的平均价格df.groupby(by='item')['price'].apply(fun)
apply 返回series 需要做映射  
def fun(s): #复数  []  ()    sum = 0    for i in s:  #遍历[]  ()        sum+=s    return sum/s.size  #求均值#使用transform函数求出水果的平均价格df.groupby(by='item')['price'].transform(fun)
transform 不需要做映射
#apply还可以代替运算工具形式mapdef fun(s):    return s+1    s = Series(data=[1,2,3])s.map(fun) #对传入的可迭代对象  每一项都做的操作s.apply(fun) #
apply还可以代替运算工具形式map

 

转载于:https://www.cnblogs.com/zhangchen-sx/p/11123819.html

你可能感兴趣的文章
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>
Ognl中“%”、“#”、“$”详解
查看>>
我对应用软件——美团的看法
查看>>
python第六篇文件处理类型
查看>>
ubuntu16系统磁盘空间/dev/vda1占用满的问题
查看>>
grid网格布局
查看>>
九涯的第一次
查看>>
处理器管理与进程调度
查看>>
向量非零元素个数_向量范数详解+代码实现
查看>>
java if 用法详解_Java编程中的条件判断之if语句的用法详解
查看>>
matlab sin函数 fft,matlab的fft函数的使用教程
查看>>
LeetCode 题解之Add Digits
查看>>
hdu1502 , Regular Words, dp,高精度加法
查看>>
iOS 电话在后台运行时,我的启动图片被压缩
查看>>
js --基本语法3 函数,数组,堆棧
查看>>
在centos上使用yum安装rabbitmq-server
查看>>
SpringBoot项目如何打War包
查看>>
Managing Dynamic Objects in C++
查看>>
计算excel列的名字
查看>>
自助Linux之问题诊断工具strace
查看>>