Pandas

    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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353