前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

Pandas

作者头像
小闫同学啊
发布2019-07-18 15:43:25
4.9K0
发布2019-07-18 15:43:25
举报
文章被收录于专栏:小闫笔记小闫笔记

正文共: 6791字 5 图 预计阅读时间: 17 分钟

每日分享

Attitude is a little thing that makes a big difference.

态度是件小事,但却意义重大。

小闫语录

一个态度端正,对事认真的人,即使能力欠佳,最后的成果肯定不会太差。一个能力突出,但是态度不端,眼高手低的人,即使完成了任务,效果也未必见好。用人,做人,态度须为第一。

Pandas

1.Pandas介绍

1.1Pandas与Numpy的不同?

答:Numpy是一个科学计算库,用于计算,提高计算效率。Pandas是专门用于数据挖掘的开源python库,也可用于数据分析。Pandas以Numpy为基础,借力Numpy模块在计算方面性能高的优势;同时基于matplotlib,能够简便的画图。Pandas对二者进行封装,使数据处理更加的便捷。

1.2初识两个方法

pd.DataFrame(ndarry, index=xx, columns=xx)
# index:行索引
# columns:列索引
date_range(start=xx, end=xx, periods=xx, freq='B')
# start:开始时间
# end:结束时间
# periods:时间天数
# freq:递进单位,默认1天,'B'默认略过周末

1.3DataFrame

类似于数组中的二维数组。或者简单的理解为一张表。DataFrame对象既有行索引,又有列索引。

a.行索引,表明不同行,横向索引,叫index,0轴,axis=0。

b.列索引,表名不同列,纵向索引,叫columns,1轴,axis=1。

1.3.1属性和方法
  • shape -- 形状(维度的元组)
  • index -- 行索引
修改行索引:xx.index = xx
  重设索引:xx.reset_index(drop=False)
      设置新的下标索引。
      drop:默认为False,不删除原来索引,如果为True,删除原来的索引值。
  以某列值设置为新的索引:set_index(keys, drop=True)
      keys:列索引名称或者列索引名称的列表。如果是多列,变为multindex
      drop:布尔值,默认是True。当做新的索引,删除原来的列。
  • columns -- 列索引
  • values -- 值
  • ndarray.T -- 转置
  • head() -- 前几行(括号里面如果不指定参数,默认是5行)
  • tail() -- 后几行(括号里面如果不指定参数,默认是5行)

1.4MultiIndex与Panel

MultiIndex是多级或者分层索引对象。它是新的三维数组存储方式,通过index获取所有的索引。

index属性:

  • names:levels的名称。
  • levels:每个level的元组值。

在Pandas版本0.20.0之前使用Panel结构存储三维数组。它有很大的缺点,比如生成的对象无法直接看到数据,如果需要看到数据,需要进行索引。

pandas.Panel(data=None, items=None, major_axis=None, minor_axis=None, copy=False, dtype=None)
# 介绍几个常用的参数
# items - axis 0,每个项目对应于内部包含的数据帧(DataFrame)。
# major_axis - axis 1,它是每个数据帧(DataFrame)的索引(行)。
# minor_axis - axis 2,它是每个数据帧(DataFrame)的列。

1.5Series

Series类似于前面的一维数组,它只有行索引。

创建Series:

pd.Series()
# 可以指定内容,默认索引,如下:
pd.Series(np.arange(10))
# 也可以指定索引
pd.Series([6.7,5.6,3,10,2], index=[1,2,3,4,5])
# 还可以通过字典数据创建
pd.Series({'red':100, ''blue':200, 'green': 500, 'yellow':1000})

获取索引和值:

  • 对象.index -- 索引
  • 对象.values -- 值

2.基本数据操作

读取文件:

pd.read_csv()

2.1索引操作

可以直接使用行列索引,注意是先列后行,如下:

data['ethanyan']['2019-04-12']

对象.loc[]-- 先行后列, 通过索引字符串索引。

data.loc['2018-02-27':'2018-02-22', 'ethanyan']

对象.iloc[]-- 先行后列, 通过索引下标获取。

data.iloc[0:100, 0:2]

对象.ix[] -- 先行后列, 下标和字符串都OK。

2.2赋值操作

需求:对DataFrame当中的Ethanyan列进行重新赋值为1

# 直接修改原来的值
data['Ethanyan'] = 1
# 或者
data.Ethanyan = 1

2.3排序

2.3.1DataFrame

对内容进行排序:

对象.sort_values(by=**, ascending=**)
    by  --  "x"         按照一个值排序
            ["x","x"]   按照多值排序
    ascending -- True(升序), False(降序)

对索引进行排序:

对象.sort_index()
2.3.2Series

同DataFrame一样,可以通过索引和内容进行排序,只是Series只有一列,所以不需要指定参数。

对象.sort_values(ascending=)
    ascending=False:降序
    ascending=True:升序
对象.sort_index()

3.DataFrame运算

3.1算术运算

直接使用 +-,是OK的;也可以使用 对象.add()对象.sub()

如:对列open进行 +1操作:

data['open'].add(1)

如:列close减去open列:

data['close'].sub(data['open'])

3.2逻辑运算

3.2.1使用逻辑运算符号 < > | &

例如筛选p_change > 2的日期数据:

data['p_change'] > 2

2018-02-27     True
2018-02-26     True
2018-02-23     True
2018-02-22    False
2018-02-14     True

例如完成多个逻辑判断, 筛选p_change > 2并且open > 15:

data[(data['p_change'] > 2) & (data['open'] > 15)]

              open      high    close    low      volume  price_change p_change turnover my_price_change
2017-11-14    28.00    29.89    29.34    27.68    243773.23    1.10    3.90    6.10    1.34
2017-10-31    32.62    35.22    34.44    32.20    361660.88    2.38    7.42    9.05    1.82
2017-10-27    31.45    33.20    33.11    31.45    333824.31    0.70    2.16    8.35    1.66
2017-10-26    29.30    32.70    32.41    28.92    501915.41    2.68    9.01    12.56    3.11
3.2.2逻辑运算函数

对象.query(expr)

  • expr:查询字符串

通过query使得刚才的过程更加方便简单

data.query("p_change > 2 & turnover > 15")

对象.isin(values)

例如判断'turnover'是否为4.19, 2.39

# 可以指定值进行一个判断,从而进行筛选操作
data[data['turnover'].isin([4.19, 2.39])]

              open    high    close     low      volume  price_change  p_change turnover  my_price_change
2018-02-27    23.53    25.88    24.16    23.53    95578.03    0.63    2.68    2.39    0.63
2017-07-25    23.07    24.20    23.70    22.64    167489.48    0.67    2.91    4.19    0.63
2016-09-28    19.88    20.98    20.86    19.71    95580.75    0.98    4.93    2.39    0.98
2015-04-07    16.54    17.98    17.54    16.50    122471.85    0.88    5.28    4.19    1.00
3.2.3统计函数

综合分析: 能够直接得出很多统计结果, count, mean, std, min, max

# 计算平均值、标准差、最大值、最小值
data.describe()

单独的统计函数,我们需要了解一下。例如:min(最小值), max(最大值), mean(平均值), median(中位数), var(方差), std(标准差),mode(众数)。

# 使用统计函数:0 代表列求结果,1 代表行求统计结果
data.max(0)

对象.median() -- 中位数

对象.idxmax(axis=) -- 最大值的索引值

对象.idxmin(axis=)

总结如下:

count

Number of non-NA observations

sum

Sum of values

mean

Mean of values

median

Arithmetic median of values

min

Minimum

max

Maximum

mode

Mode

abs

Absolute Value

prod

Product of values

std

Bessel-corrected sample standard deviation

var

Unbiased variance

idxmax

compute the index labels with the maximum

idxmin

compute the index labels with the minimum

3.2.4累计统计函数

函数

作用

cumsum

计算前1/2/3/…/n个数的和

cummax

计算前1/2/3/…/n个数的最大值

cummin

计算前1/2/3/…/n个数的最小值

cumprod

计算前1/2/3/…/n个数的积

3.2.5自定义运算

对象.apply(func, axis=0)

  • func:自定义函数
  • axis=0:默认是列,axis=1为行进行运算

例如:我们定义一个函数,对列的最大值与最小值做差。

data.apply(lambda x: x.max() - x.min(), axis=0)

4.Pandas画图

对象.plot()
    x -- x轴坐标的值
    y -- y轴坐标的值
    kind -- 画什么样的图
        line -- 折线图
        bar(barh) -- 柱状图
        hist -- 直方图
        pie -- 饼图
        scatter -- 散点图

5.文件读取与存储

5.1csv文件

读取read_csv:

pandas.read_csv(filepath_or_buffer, sep =',' )

  • filepath_or_buffer:文件路径
  • usecols:指定读取的列名,列表形式

写入to_csv:

DataFrame.to_csv(path_or_buf=None, sep=', ’, columns=None, header=True, index=True, mode='w', encoding=None)

  • path_or_buf :string or file handle, default None
  • sep :character, default ‘,’
  • columns :sequence, optional
  • mode:'w':重写, 'a' 追加
  • index:是否写进行索引
  • header :boolean or list of string, default True,是否写进列索引值

5.2hdf文件

HDF5文件的读取和存储需要指定一个键,值为要存储的DataFrame

读取read_hdf

pandas.read_hdf(path_or_buf,key =None,** kwargs)

  • 从h5文件当中读取数据
  • path_or_buffer:文件路径
  • key:读取的键
  • return:Theselected object

写入to_hdf

DataFrame.to_hdf(path_or_buf, key, **kwargs)

注意:最后保存内容是 xx.h5 官方推荐使用

优先选择使用HDF5文件存储

  1. HDF5在存储的时候支持压缩,使用的方式是blosc,这个是速度最快的也是pandas默认支持的。
  2. 使用压缩可以提磁盘利用率,节省空间。
  3. HDF5还是跨平台的,可以轻松迁移到hadoop 上面。

5.3json文件

JSON是我们常用的一种数据交换格式,前面在前后端的交互经常用到,也会在存储的时候选择这种格式。所以我们需要知道Pandas如何进行读取和存储JSON格式。

读取read_json:

pandas.read_json(path_or_buf=None, orient=None, typ='frame', lines=False)

  • path -- 路径
  • orient -- "records",以 columns:values的形式输出。
  • lines -- 需要和之前的方式相同,按照每行读取json对象。
  • typ : default ‘frame’, 指定转换成的对象类型series或者dataframe

写入to_json:

DataFrame.to_json(path_or_buf=None, orient=None, lines=False)

  • 将Pandas 对象存储为json格式。
  • path_or_buf=None:文件地址。
  • orient:存储的json形式,{‘split’,’records’,’index’,’columns’,’values’}。
  • lines:一个对象存储为一行,一般时,写入传递使用True。

6.高级处理-缺失值处理

首先需要判断是否有缺失值,也就是是否为NaN:

pd.isnull()
pd.notnull()

如果有,需要进行进行处理:

a.缺失值是nan,直接处理

  • 删除np.dropna()
  • 替换np.fillna(value, inplace=True)
    • value:替换成的值
    • inplace:True:会修改原数据,False:不替换修改原数据,生成新的对象

b.缺失值不是nan,替换成nan再处理

np.replace(to_replace="?", value=np.nan)

7.高级处理-数据离散化

7.1为什么要离散化?

答:连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。

7.2什么是数据的离散化?

答:连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值。

简单的说,就是对数据进行分类。

7.3使用方法

pd.qcut(data, bins):

  • 把数据分成大致相等的几类。一般会与value_counts搭配使用,统计每组的个数。
  • bins -- 需要分成几类

series.value_counts():

  • 统计分组次数

pd.cut(data, bins):

  • data -- 指定分组的间隔
  • bins -- 在哪儿进行分割

7.4one_hot编码(热独编码,哑变量)

什么是one_hot编码?

答:把每个类别生成一个布尔列,这些列中只有一列可以为这个样本取值为1。其又被称为热编码。

pandas.get_dummies(data, prefix=None)

  • data:array-like, Series, or DataFrame
  • prefix:分组名字

8.高级处理-合并

pd.concat([], axis=)

  • 按照行或列进行合并。
  • [xx, xx] 合并的两张表。
  • axis=0为列索引,axis=1为行索引。

pd.merge()

  • left和right是DataFrame结构数据。
  • how -- 按照什么方式进行连接(左连接、右连接、外连接、内连接),默认是内连接。
  • on -- 依据哪几个键

9.高级处理-交叉表与透视表

pd.crosstab(*, *)

  • 交叉表
  • 返回对象是具体的数据统计

pd.pivot_table([], index="")

  • 透视表
  • [] -- 比较内容
  • index=xx -- 按照比较的标准
  • 直接返回对应的占比情况

10.高级处理-分组与聚合

对象.groupby(key, as_index=False).max()

  • key -- 按照哪个键进行分组
  • key值也可以传多个,然后通过多个标准进行分组
  • as_index -- 当前列是否当成索引

注意:分组聚合一般放到一起使用,抛开聚合,只说分组,没有意义.

优质文章推荐:

公众号使用指南

redis操作命令总结

前端中那些让你头疼的英文单词

Flask框架重点知识总结回顾

项目重点知识点详解

难点理解&面试题问答

flask框架中的一些常见问题

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

重点内容回顾-DRF

Django相关知识点回顾

美多商城项目导航帖

项目重要技术点介绍

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每日分享
  • Pandas
    • 1.Pandas介绍
      • 1.1Pandas与Numpy的不同?
      • 1.2初识两个方法
      • 1.3DataFrame
      • 1.4MultiIndex与Panel
      • 1.5Series
    • 2.基本数据操作
      • 2.1索引操作
      • 2.2赋值操作
      • 2.3排序
    • 3.DataFrame运算
      • 3.1算术运算
      • 3.2逻辑运算
    • 4.Pandas画图
      • 5.文件读取与存储
        • 5.1csv文件
        • 5.2hdf文件
        • 5.3json文件
      • 6.高级处理-缺失值处理
        • 7.高级处理-数据离散化
          • 7.1为什么要离散化?
          • 7.2什么是数据的离散化?
          • 7.3使用方法
          • 7.4one_hot编码(热独编码,哑变量)
        • 8.高级处理-合并
          • 9.高级处理-交叉表与透视表
            • 10.高级处理-分组与聚合
            相关产品与服务
            对象存储
            对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档