博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pandas数据处理#数据科学手册笔记
阅读量:5771 次
发布时间:2019-06-18

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

数据取值与选择

Series数据选择方法

类比一维np数组和py字典

  1. 看作字典
import pandas as pddata = pd.Series([0.25,0.5,0.75,1],index=['a','b','c','d'])#或者data = pd.Series({'key1':value1,'key2':value2...})data['b']#显式索引'a' in data #类比字典表达式,检测键/索引和值data.keys() #类比字典,输出键list(data.items()) #类比输出字典data['e'] = 1.25 # 新增键扩展字典,增加新的索引值扩展# Series可变,Pandas 在底层已经为可能发生的内存布局和 数据复制自动决策
  1. 看作一维数组
data['a':'c'] # 显式索引作为切片,闭区间data[0:2] #隐式索引作为切片,左闭右开data[(data > 0.3) & (data < 0.8)] #掩码
  1. 索引器:loc iloc ix
# loc表示取值和切片都是显式的data.loc[1]data.loc[1:3]out:1  a    3  b# iloc表示取值和切片都是puthon形式(从0开始,左闭右开区间)的隐式索引data.iloc[1]data.iloc[1:3]out:3  b    5  c    # ix:标准的python列表取值方式(主要用于DataFrame对象

DataFrame数据选择方法

  1. 看作字典
area = pd.Series({'California':423967,'Texas':695662,'New York':141297,'Florida':170312,'Illinois':149995})pop = pd.Series({'California':38332521,'Texas':26448193,'New York':19651127,'Florida':19552860,'Illinois':12882135})data = pd.DataFrame({'area':area,'pop':pop})#获取DataFrame的列data.area   #属性形式#列名不是纯字符串或者列名与DataFrame方法同名时,不能用属性索引data['area'] #字典形式,注意引号#使用字典语法增加列data['density'] = data['pop'] / data['area']

2. 看作二维数组

#输出值,按行查看数组数据data.values# 转置DataFrame多维数组data.T

转置多维数组

3. 索引器 与Series相同,用于处理np形式数据的方法都可用于索引器 4. 查看数据及属性

data.dtypes  #查看各列数据类型data.head(n)    #查看前n行数据,不输入参数时默认前5行data.tail(n)#查看后n行数据,不输入参数时默认后5行data.index  #查看行索引data.columns  #查看列索引data.values #查看所有数值data.describe() #查看描述性统计,包括count mean min max std 25% 50% 75%#重置数据#使用iloc索引器可以像操作数组操作DataFrame#获取1-3行得0、2列数据,其中[0,2]部分参数不能使用切片data.iloc[0:3,[0,2]]data.iloc[0,0] = 1  #所选位置替换为1

pandas数值运算方法

  1. pandas对象使用numpy通用函数,结果为保留索引得pandas对象
  2. 通用函数:索引对齐(通过python内置的集合运算规则实现,任何缺失值默认都用NaN填充)

DataFrame索引对齐

rng = np.random.RandomState(42)A = pd.DataFrame(rng.randint(0,10,(2,2)),list='AB')#输出2x2矩阵B = pd.DataFrame(rng.randint(0,10,(3,3)),list='BCA')#输出3x3矩阵A+B#输出结果的索引会自动排序,缺失值默认用NaN填充fill = A.stack().mean()A.add(B,fill_value=fill)#用A中所有值的均值填充缺失值#计算均值需要用stack将二维数组压缩成一维数组

py运算符与pd方法映射关系

运算

A = rng.randint(10,size=(3,4))df = pd.DataFrame(A,columns=list'QPST')df - df.iloc[0]#默认按行计算df.subtract(df['R'],axis=0)#通过axis参数指定按列计算

处理缺失值

  • 主要形式 null NaN NA
  • 方法
    • 通过一个覆盖全局的掩码表示缺失值
    • 用一个标签值(sentinel value)表 示缺失值
  1. None
    • None是py单体对象,只能用于py对象构成的数组('object'数组类型
    • py中没有定义整数与None之间的算数运算
  2. NaN
    • 种按照 IEEE 浮点 数标准设计、在任何系统中都兼容的特殊浮点数
    • Nan会和所接触过的数据同化:无论和NaN进行何种操作,最终结果都是NaN
    • nansum() nanmin()函数可以忽略缺失值的影响
  3. pandans把NaN和None看成是等价交换,自动将None转换为NaN;将没有标签值得数据类型自动转换成浮点数缺失值NA
  4. pandas对不同类型缺失值得转换规则

处理缺失值

  • 发现缺失值
    • data.isnull()#创建布尔类型掩码标签数组
    • data.notnull()
    • data[data.notnull()]#布尔类型掩码数组可以直接作为Series或DataFrame索引使用
  • 剔除缺失值
    • data.dropna()#Series中可以直接使用,DataFrame中无法单独剔除一个值,只能剔除缺失值所在的整行或者整列(没有指定时默认剔除行)
    • 参数axis指定剔除行/列
    • 参数how设置剔除行或者列缺失值的数量阈值
    • 参数thresh设置行或列中非缺失值的最小数量
  • 替换缺失值
    • data.fillna(0) #用0填充缺失值
    • mathod指定填充方式
      • data.fillna(method='ffill')#前面没有值时,填充后依然为空
      • data.fillna(method='bfill')#后面没有值时,填充后依然为空

转载于:https://juejin.im/post/5cae04fff265da038145c1cc

你可能感兴趣的文章
标准与扩展ACL 、 命名ACL 、 总结和答疑
查看>>
使用@media实现IE hack的方法
查看>>
oracle体系结构
查看>>
Microsoft Exchange Server 2010与Office 365混合部署升级到Exchange Server 2016混合部署汇总...
查看>>
Proxy服务器配置_Squid
查看>>
【SDN】Openflow协议中对LLDP算法的理解--如何判断非OF区域的存在
查看>>
纯DIV+CSS简单实现Tab选项卡左右切换效果
查看>>
EdbMails Convert EDB to PST
查看>>
Centos7同时运行多个Tomcat
查看>>
使用CocoaPods过程中的几个问题
查看>>
Spring boot 整合CXF webservice 全部被拦截的问题
查看>>
Pinpoint跨节点统计失败
查看>>
机房带宽暴涨问题分析及解决方法
查看>>
XP 安装ORACLE
查看>>
八、 vSphere 6.7 U1(八):分布式交换机配置(vMotion迁移网段)
查看>>
[转载] 中华典故故事(孙刚)——19 万岁
查看>>
php5编译安装常见错误和解决办法集锦
查看>>
Unable to determine local host from URL REPOSITORY_URL=http://
查看>>
ORACLE配置,修改tnsnames.ora文件实例
查看>>
Workstation服务无法启动导致无法访问文件服务器
查看>>