Pandas速查中文手册

导包

	import pd as pandas

创建pandas对象(Series | DataFrame | Index)

  • 创建Series

      pd.Series(data,index = index)
    
  • 创建DataFrame

      pd.DataFrame(Series,columns=['population'])
      pd.DataFrame({'A':Series1,'B':Series2})
      pd.DataFrame([{'a':1,'b':2},{'c':1,'d':2}])
      pd.DataFrame(np.random.rand(3,2),columns=['foo',bar],index=['a','b','c'])
    
  • 创建Index

      pd.Index([1,2,3,4,5])
    

取值和选择

  • Series:

    • 显示

       data['index']
      
    • 增加新扩展

       data['newindex'] = newdata
      
    • 显示切片

       data['a':'b']
      
    • 隐式切片

       data[0:2]
      
    • 显示索引

       data.loc['a']
      
    • 隐式索引

       data.iloc[1:3]
      
  • DataFrame:

    • 取一列带索引->取一列Series

       fdata['colA']
      
    • 新增一列->增加一列Series

       fdata['col_add'] = fdata['B'] / fdata['A'] 
      
    • 按行查看数据

       fdata.values
      
    • 转置数据

       fdata.T
      
    • 取单个行索引获取一行数据

       fdata.values[0]
      
    • 隐式索引

       fdata.iloc[:3,:2]
      
    • 显示索引

       fdata.loc[:'col1',:'col2']
      

Pandas数值运算

通用函数保留索引
索引对齐
缺失数据NaN填充

缺失值处理

  • numpy中
    None->object对象,比其他原生类型数组消耗更多资源。 没有定义整数与None之间的加法运算。
    NaN->与接触的数据同化

  • pandas中
    None和NaN可以看作等价交换

  • 是否存在缺失值

      data.isnull()
    
  • 是否不存在缺失值

      fdata.notnull()
    
  • 可作为索引使用

      fdata[fdata.notnull()]
    
  • 返回一个填充了缺失值的副本

      fdata.fillna()
    
  • 剔除缺失值

      fdata.dropna() 默认剔除整行
      fdata.dropna(axis='columns')
      
      how或thresh 设置缺失值的数量阈值 ,参数如: all / any / thresh=3
      fdata.dropna(axis='columns',how=any)
    
  • 填补缺失值

      data.fillna(0)
    
  • 向后填充NaN

      data.fillna(method='ffill')
    
  • 向前填充NaN

      data.fillna(method='bfill')
      fdata.fillna(method='ffill',axis=1)
    

层级索引

  • 创建多级索引

      index = [('a',1),('b',1),('c',2),('d',2)]
      index = pd.MutiIndex.from_tuples(index)
    
  • 索引重置,增加多级索引

      data.reindex(index)
    
  • 多级索引的Series转为普通索引的DataFrame

      fdata=data.unstack()
      stack()效果相反
    

多级索引创建

  • 显式创建多级索引

  •   pd.MultiIndex.from_arrays(['a','a','b','b'],[1,2,1,2])
      pd.MultiIndex.from_tuples([('a',1),('a',2),('b',1),('b',2)])
      pd.MultiIndex.from_product([['a','b'],[1,2]])
      pd.MultiIndex(levels=[['a','b'],[1,2]],labels=[[0,0,1,1],[0,1,0,1]])
    
  • 多级索引名称

      data.index.names= ['state','year']
    
  • 多级列索引

    • 构造index结构与上多级索引相同
  • 创建dataframe对象时将其传入

      columns=pd.MultiIndex.from_product([['a','b'],[1,2]],names=['x','y'])
      pd.DataFrame(fdata,index=index,columns=columns)
    

多级索引的取值和切片

  • series取值和切片

    • 取单个元素

      data['a',2000]
      
    • 局部取值(带低级索引的新Series)

        data['a']
      
    • 局部切片(要求multiIndex排序)

        data['a':'c']
      
    • 只用低级索引取值

        data[:,2000]
      
    • 布尔掩码取值

        data[data>10]
      
    • 花哨取值

        data[['a','c']]
      
  • dataframe用法和Series类似

      fdata['x','y']
    
    • 推荐取值用法

        idx = pd.IndexSlice
      
    • 索引先行后列

        fdata.loc[idx[:,1],idx[:,'HR']]
      

多级索引行列转换

  • 局部切片需要multiIndex 排序

      data = data.sort_index()
      data['a':'b']
    
  • 索引stack 与 unstack

    • 通过level参数设置转换的索引层级

        data.unstack(level=0)
      
  • 索引的设置与重置

    • 列名称

        data.reset_index(name = 'pop')
        data.reset_index(['state','year'])
      
  • 多级索引的数据累计方法

      	fdata.mean(level='index_nane')
      	fdata.max(level='index_nane')
    

合并数据集 concat与append操作(简易合并操作)

ser1 ser2

	pd.concat([ser1,ser2])

fdata1 fdata2

	pd.concat([fdata1,fdata2],axis='col') 与axis = 1效果相同,默认为0 行
  • 合并重复索引

      pd.concat([x,y]) 合并保留索引哪怕重复。
    
  • 捕捉重复索引

      pd.concat([x,y],verify_integrity=True)
    
  • 忽略索引 创建新的整数索引

      pd.concat([x,y],ignore_index=True)
    
  • 增加多级索引

      pd.concat([x,y],keys=['x','y'])
    
  • 类似join的合并

      pd.concat([fdata1,fdata2],join='inner')
    
  • 合并方式指定dataframe列

      pd.concat([fdata1,fdata2],join_axes=[fdata1.columns])
    
  • append操作

      fdata1.append(fdata2)
    

合并数据集:合并和连接

	pd.merge() 
  • 一对一连接,多对一连接,多对多连接

      pd.merge(fdata1,fdata2)
    
  • 合并相同列名

      pd.merge(fdata1,fdata2,on='column1')
    
  • 合并不同列命

      pd.merge(fdata1,fdata2,left_on="columns",right_on="name")
    
  • 合并索引

      pd.merge(fdata1,fdata2,left_index=True,right_index=True)
    
  • 索引列混合x

      pd.merge(fdata1,fdata2,left_index=True,right_on='column1')
    
  • 设置数据连接的集合操作规则

    • 内 外 左 右 连接

        pd.merge(fdata1,fdata2,how='inner')
        pd.merge(fdata1,fdata2,how='outer')
        pd.merge(fdata1,fdata2,how='left')
        pd.merge(fdata1,fdata2,how='right')
      
  • 重复列名

      两dataframe 两个列命都为column1 column2,合并column1不合并column2
      pd.merge(fdata1,fdata2,on="column1",suffixes=["_L","_R"])
    

Pandas累计与分组

  • 简单累计功能 属性axis 确定按行、列

      fdata.mean(axis='columns')
      count() 计数项 first() last()第一和最后一项 mean() median()均值和中位数
      min() max() std()标准差 var()方差  mad()均值绝对偏差 prod()所有项乘积 sum()所有项求和
    
  • groupby
    groupby分组当运行累计函数的时候才会开始计算,类似spark中rdd的transformation和action操作
    按列取值,求中位数。

      fdata.groupby("按什么字段分组")['选取的一列'].median() 
    
    • 按组迭代,返回的每一组都是Series或者DataFrame

        for(method,group) in planets.groupby('method'):
      	 print("{0:30s} shape={1}".format(method,group.shape))
      
    • 调用方法

        planets.groupby('method')['year'].describe().unstack()
      
  • 累计、过滤、转换和应用

    • 累计

        fdata.groupby('key').aggregate(['min',np.median,max])
        fdata.groupby('key').aggregate({'data1':'min','data2':'max'})
      
    • 过滤

        def filter_func(x):
        	return x['data2'].std() > 4
        fdata.groupby('key').filter(filter_func)
      
    • 转换

        fdata.groupby('key').transform(lambda x: x-x.mean())
      
    • apply()方法
      在每个组上用任意方法
      apply()可以在每个组上应用任意方法,比如某方法

        def norm_by_data2(x):
        	......
        	return x;
        fdata.groupby('key').apply(norm_by_data2)
      
  • 自定义分割的键

    • 将列表、数组、Series或索引作为分组键

        L = [0,1,0,1,2,0]
        fdata.groupby(L).sum()
      
    • 字典或Series将索引映射到分组名称

        mapping={'A':'vowel','B':'con','C':'con'}
        fdata.groupby(mapping).sum()
      
    • 任意python函数

        fdata.groupby(str.lower).mean()
      
    • 多个有效键构成的列表

        fdata.groupby([str.lower,mapping]).mean()
      

pandas字符串方法列表

  • 几乎所有的Python内置字符串方法都被赋值到pandas向量化字符串方法中,但返回值不同。

      data.str.lower()
      data.str.len()
    
  • 使用正则表达式的方法

      data.str.extract('[A-Za-z]')
    
  • 其他字符串操作

    • 向量化字符串的取值和切片操作

        data.str[0:3] 等价 data.str.slice(0,3)
        data.str.split().str.get(-1)
      
    • 指标变量

        分解成一个元素为0/1的类似数组
        fdata['info'].str.get_dummies('|')
      

pandas时间序列:用时间作索引

  • 通过时间索引创建series对象可以用时间进行切片取值

      data['2019-06-28':'2020-06-29']
    

pandas时间序列数据结构

时间戳数据:DateIndex
时间周期数据:PeriodIndex
时间增量或持续时间数据:TimedeltaIndex

  • 任何DatetimeIndex 类型都可以通过to_period()方法和一个频率代码转换成PeriodIndex类型

      data.to_period('D')
    
  • 当一个日期减去另一个日期返回的结果是TimedeltaIndex类型

      data - data[0]
    
  • 有规律的时间序列

    • 默认频率为D 天,可以修改成自己所需要

        pd.date_range('2020-06-28','2020-06-29',freq='H')
        pd.date_range('2020-06-28',period=8,freq='H')
        pd.period_range('2020-06',period=8,freq='M')
        pd.timedelta_range(0,periods=10,freq='H')
      
  • 时间频率与偏移量
    pandas频率代码
    天 周 月末 季末 年末 小时
    D W M Q A H
    以上前面加B 即为仅含工作日时间

  • 重新取样、迁移和窗口

    • 重新取样与频率转换
      数据累计为基础:resample()
      数据选择为基础:asfreq()

        fdata.resample('BA').mean() 上一年均值
        fdata.asfreq('BA') 上一年最后一个工作日
      
        asfreq('D',method='bfill')
      
    • 迁移

        shift()迁移数据
        tshift()迁移索引
        fdata.shift(900)
        fdata.tshift(900)
      
    • 时间窗口

      data.rolling(365,center=True)
      

高性能pandas:eval()与query()

	df.eval('各种运算')
	df.query('各种运算')

本文基于《Python数据科学手册》
个人学习使用

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Pandas是一种Python数据分析库,它可以帮助用户处理和分析数据。Pandas速查手册中文版是一本Pandas速查手册,提供了Pandas常用的函数和方法的使用介绍,便于用户在实际应用场景中快速查阅和使用。该手册包含了Pandas的数据结构、数据的读取和写入、数据的选择和过滤、数据的处理和转换、数据的分析和计算等方面的内容。通过该手册,用户可以快速了解和学习Pandas,以及在数据分析和处理过程中使用Pandas的知识和技能。同时,该手册还提供了一些常见的数据操作案例和代码示例,帮助用户更好地理解和掌握Pandas的使用。总之,Pandas速查手册中文版pdf是一本非常实用的数据分析工具文献,可帮助Python程序员进行高效便捷的数据操作,提升工作效率。 ### 回答2: Pandas是一个基于Python语言的数据分析、处理库。Pandas速查手册中文版PDF,是一份详细、全面的Pandas使用手册,在使用Pandas时,可以作为方便的参考资料。 这份手册的主要内容涵盖了Pandas中各种数据结构、数据操作方法、及应用案例等方面,是新手入门、熟手复习的很好工具。同时,速查手册PDF版在使用时方便快捷,可以随时随地查阅。 当需要对数据进行清洗、整合、分析时,使用Pandas可以提高工作效率,如果对Pandas掌握得不够熟悉,速查手册可以帮助了解数据相关的Python代码的写作规范、Python代码的编写方法等,帮助使用者快速了解相关知识点。 Pandas速查手册中文版 PDF 是数据分析领域中的一个实用工具,尤其适合需要在数据处理过程中提高效率的人群。 ### 回答3: Pandas速查手册中文版PDF是一本非常实用的数据分析工具书,主要介绍了Pandas库的基本使用方法和常见操作方式。该手册的特点是简洁明了,涵盖面广,可以帮助用户快速地找到需要的知识点和操作步骤。 这本手册分为三个部分,第一部分介绍了Pandas的数据结构、基本操作和常用函数;第二部分介绍了数据清洗、合并和分组计算等高级操作;第三部分则是一些应用案例,包括如何使用Pandas处理具体的数据问题。 最值得称赞的是,该速查手册Pandas中文别名的使用进行了充分的解释,让人容易理解并记住基础操作。此外,手册还提供了一些实用的技巧和应用案例,帮助用户更好地理解Pandas库的使用方法。 总的来说,如果你是初学者或已经掌握了一些Pandas知识的读者,这本Pandas速查手册中文版 PDF将是一个非常有用的参考工具。它不仅能够帮助你快速找到需要的操作步骤,还能帮助你理解Pandas库的一些高级用法,使你的数据分析工作更加得心应手。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值