Pandas

作者: MA木易YA | 来源:发表于2019-03-08 22:51 被阅读4次

    pandas是一款数据处理工具,集成了numpy以及matplotlib,拥有便捷的数据处理以及文件读取能力

核心数据结构

1. DataFrame

    numpy仅用作计算,在数据表示方面还有所欠缺,很难从数据上面看出信息表达的含义,在这里我们可以将DataFrame看作是有行列索引(标题)的二维数组

I. DataFrame属性

pd.DataFrame(array, index,columns)

因为pandas是集成了numpy的,属性方面用法和功能都类似

  • shape(形状)
  • values(除去行列索引后的值)
  • T(行列转置)
  • index(行索引)
  • columns(列索引)

II. 方法

  • head(size)——显示前size行数据,默认前五行
  • tail(size)——显示后size行数据,默认后五行
 import pandas as pd

#二维数组定义
 s = [[10,20],[20,30],[30,40]]
#行索引定义
 row = ["test{}".format(i+1) for i in range(3)]
#列索引定义
 col = ["2019-3-{}".format(i+1) for i in range(2)]

data = pd.DataFrame(s, index=row, columns=col)

#输出
       2019-3-1  2019-3-2
test1        10        20
test2        20        30
test3        30        40

III.设置索引

  • 修改行列索引值

只能整体修改,不能修改单独某一项

  • 重设索引

reset_index(drop=False)

    重置索引值,默认drop为False,不删除原索引,将其单独立为一列,在此基础上将索引重置

  • 设置新的索引 __set_index(keys, drop=True)__

    • keys:列索引名称或者列索引名称的列表
    • drop: boolean,默认为True,当做新的索引,删除原来的列
#设置多个索引
df = pd.DataFrame({'month':[1,4,7,10],'year':[2012,2014,2013,2016],'sale':[55,40,84,31]})

df.set_index(['year', 'month'])#设置之后此时返回的index是MultiIndex类型

#输出
            sale
year month
2012 1        55
2014 4        40
2013 7        84
2016 10       31
>>>

IV. MultiIndex

多级或分层索引对象,可用于存放三维数据

  • index属性
    • names:levels的名称
    • levels:每个level的元组值
 new_df = df.set_index(['year', 'month'])

new_df.index

new_df.index.names

new_df.index.levels

#输出
----------------------index--------------------------------------------
MultiIndex(levels=[[2012, 2013, 2014, 2016], [1, 4, 7, 10]],
           labels=[[0, 2, 1, 3], [0, 1, 2, 3]],
           names=['year', 'month'])
----------------------------------------------------------------------------------

----------------------names--------------------------------------------
FrozenList(['year', 'month'])
----------------------------------------------------------------------------------

----------------------levels--------------------------------------------
FrozenList([[2012, 2013, 2014, 2016], [1, 4, 7, 10]])

2. Panel

    存放三维数据的面板容器,0.20.0后已经弃用,推荐DataFrame上的MultiIndex方法表示3D数据

I.维度

  • items => axis0,每个项目对应内部包含的数据帧(DataFrame)
  • major_axis => axis 1,它是每个数据帧(DataFrame)的索引(行)
  • minor_axis => axis 2, 它是每个数据帧(DataFrame)的列

3. Series

可理解为带索引的一维数组

I. 属性

  • index—— 索引项
  • values——索引值,numpy.ndarray类型

II. 创建Series

  • 通过已有数据创建

指定内容,默认索引

pd.Series(np.arange(10))

#输出
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9


指定索引

pd.Series([6.7,5.6,3,10,2],index=[1,2,3,4,5])

#输出
1     6.7
2     5.6
3     3.0
4    10.0
5     2.0
dtype: float64

  • 通过字典数据创建
pd.Series({'red':1000,'blue':100,'green':500,'yellow':200})

#输出
red       1000
blue       100
green      500
yellow     200
dtype: int64

III. 索引操作

data = pd.readcsv('filename.csv')

1)直接索引
          必须满足先列后行的规则,data[col][row]
2)按名字索引
          new_data = data.locp[索引名,索引名]或者new_data = data.locp[索引名][索引名]
3)直接按照数字索引
          data.iloc[number,number]
4)IX组合索引(数字和名字组合)
          data.ix[parm,parm]

  • 在进行索引操作的时候,可以结合前面的index以及columns.get_indexer等方法进行数据的获取

IV. 赋值

按照上述索引方法找到对应数据进行赋值即可

V. 排序
1)按照内容排序

sort_values(by=,ascendinf=)

  • by:排序关键字,可指定单键或者多建(以列表形式赋给by即可)
  • ascending:默认升序,False则降序

2)按照索引排序

sort_index()

  • 排序方法对DataFrame以及Series都是适用的,前者需要指定关键字,但是Series的一维数据只需要直接调用方法执行即可。

VI. DataFrame运算
1)算术运算
          可以直接用运算符(+、-、*等)或者相应的运算方法(add()、sub()等),作用于数据里面的所有元素
2)逻辑运算

  • 逻辑运算符
    > (大于) 、 < (小于) 、 &(并且) 、 |(或者)
              返回带索引的布尔值,可以用相应的索引方法筛选数据,例如data[data['parm']>2],在使用&的时候要注意优先级,不确定的可以用括号包裹

  • 逻辑运算函数

    • query(expr) —— 按照expr字符串条件查询
    • isin(values) —— 判断是否含有values数值,有则返回True,否则返回False

V. 统计运算
    max、mean、median、var、std等,此外可以使用describe()方法统一进行运算,它会自动统计出一些常用运算结果(包含以上内容)

count.png
  • 这里的idxmax就是类似之前numpy里面的argmax方法获取最大值的位置

VI. 自定义运算

如果需要额外的运算规则,可以自定义一个函数进行统计

apply(func, axis=0)

  • func:自定义函数
  • axis: 默认为0,计算列,axis=1时对行运算
#自定义一个对列数据最大值减最小值的运算函数

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

pandas画图

image.png

文件读取与存储

image.png

1. csv操作

I. 读取csv

pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, names=, usecols=)

  • filepath_or_buffer:文件路径
  • usecols:指定读取的列名,列表形式,用作筛选所需要的数据,也可以通过drop函数剔除数据
  • names:如果遇到直接就是数据的文件,需要通过names参数手动填入索引项

II. 写入csv

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

  • path_or_buf:文件路径
  • sep:分隔符
  • columns:要保存的列,列表形式
  • header:默认为True,是否写进列索引值
  • index:是否写进行索引值
  • mode:w为重写,a为追加
  • series和dataframe操作基本一致

2. HDF5操作

    HDF5的存储支持压缩,使用的方式是blosc,速度最快也是pandas默认支持的,可以提高磁盘利用率,节省空间的同时还支持跨平台,可以轻松迁移到hadoop上面,HDF5文件的读取和存储需要指定一个键,值为要存储的DataFrame,一个键对应一个DataFrame,也可以相当于是存储三维数据了

I.读取hdf5

    读取以及写入需要指定键,不同的键对应不同的DataFrame

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

  • key:读取的键
  • mode:打开文件的方式

II. 写入hdf5文件

可以写入同一个hdf5文件当中,以不同的键区分开来

DataFrame.to_hdf(path_or_buf, key, kwargs)

3. JSON文件操作

I. 读取

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

  • orient:指定格式,以下为参数值
    • split
    • records(最常用的格式,其他了解即可)
    • index
    • columns
    • values
  • lines:是否逐行读取,默认为False
  • typ:指定转换成的对象类型,series或者dataframe,默认为frame

2. 写入

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

相关文章

网友评论

    本文标题:Pandas

    本文链接:https://www.haomeiwen.com/subject/xzzlpqtx.html