//此文档的目的是帮助更多初学Python的Programmers少造轮子,致力于顺藤摸瓜。因水平所限,如有缺漏以及不严谨之处,请各位多多指教。

//任何人都可以轻而易举地掌握DataFrame。你所需要的只是一个脑子,和有记事本程序的电脑。

什么是DataFrame?

首先给出官网的定义,是不是有点眼熟?

没错,它就是来源于大名鼎鼎pandas库的内建方法。

python dataframe保存成h5 python存储dataframe_Python

 首先我们先搞清楚它是做什么的?在入门阶段,我们简单把它理解为一个表格型数据结构。

它含有一组有序的index,大致可看成共享同一个index的series集合。

>>> d = {'col1': [1, 2], 'col2': [3, 4]}
>>> df = pd.DataFrame(data=d)
>>> df
   col1  col2
0     1     3
1     2     4

data : numpy数组,字典或DataFrame

字典可以包括序列,数组,或长得像列表的元素。

index : 数组的列标,如上:[0,1]

如果未指定下标,则采用默认下标。

columns : 数组的行标,如上:[col1,col2]

如果未指定行标,则采用默认行标。

dtype : 强制性数据类型

只能有一种哦,也可以空着。

copy : 布尔值,默认情况下是FALSE

Copy data from inputs. Only affects DataFrame / 2d ndarray input

到这里,你就已经入门了!但如果你想继续了解一些属性,看下面吧:

T

转置索引和列。

at

访问行/列标签对的单个值。

axes

返回表示DataFrame轴的列表。

blocks

(已弃用)as_blocks()的内部属性,属性同义词

columns

DataFrame的列标签。

dtypes

返回DataFrame中的dtypes。

empty

指示DataFrame是否为空。

ftypes

返回DataFrame中的ftypes(稀疏/密集和dtype的指示)。

iat

按整数位置访问行/列对的单个值。

iloc

纯粹基于整数位置的索引,用于按位置选择。

index

DataFrame的索引(行标签)。

ix

主要基于标签位置的索引器,具有整数位置回退。

loc

通过标签或布尔数组访问一组行和列。

ndim

返回表示轴/数组维数的int。

shape

返回表示DataFrame维度的元组。

size

返回一个int,表示此对象中的元素数。

style

返回Styler对象的属性,该对象包含用于为DataFrame构建样式化HTML表示的方法。

values

返回DataFrame的Numpy表示。

既然有了关键字,那肯定要被用到方法(Function)里: 

篇幅限制,这里只提到一些比较常用的方法。

abs()

返回具有每个元素的绝对数值的Series / DataFrame。

add(其他[,轴,级别,fill_value])

添加数据帧和其他元素(二元运算符添加)。

add_prefix(字首)

带有字符串前缀的前缀标签。

add_suffix(后缀)

带有字符串后缀的后缀标签。

agg(func [,轴])

使用指定轴上的一个或多个操作进行聚合。

aggregate(func [,轴])

使用指定轴上的一个或多个操作进行聚合。

align(其他[,join,axis,level,copy,...])

使用指定的每个轴索引的连接方法将轴上的两个对象对齐

all([轴,bool_only,skipna,等级])

返回是否所有元素都是True,可能是在轴上。

any([轴,bool_only,skipna,等级])

返回任何元素在请求的轴上是否为True。

append(其他[,ignore_index,...])

将其他行附加到此帧的末尾,返回一个新对象。

apply(func [,axis,broadcast,raw,reduce,...])

沿DataFrame的轴应用函数。

applymap(FUNC)

将函数元素应用于Dataframe。

as_blocks([复制])

(已弃用)将帧转换为dtype - >构造函数类型的dict,每个类型都具有同类dtype。

as_matrix([列])

(DEPRECATED)将帧转换为Numpy数组表示。

asfreq(freq [,方法,how,normalize,...])

将TimeSeries转换为指定的频率。

asof(其中[,子集])

获取没有任何NaN的最后一行(或者在没有NaN的情况下考虑仅使用DataFrame情况下的列子集的最后一行)

assign(** kwargs)

将新列分配给DataFrame,返回一个新对象(副本),并将新列添加到原始列中。

astype(dtype [,copy,errors])

将pandas对象转换为指定的dtype dtype

现在,尝试写一个简单的DataFrame?

举个例子,建立几款潮品笔记本的价格列表如下。

import pandas as pd#DataFrame来源于此
import numpy as np#因为numpy的数组比较好用,所以我们用np的数组方法
data=np.array([('MacBook',10200),('XPS15',15800),('Surface',6400)])#建立一个np的数组,建立一个“关键词-价格对”
frame=pd.DataFrame(data,index=range(1,4),columns=['name','price'])#建立一个以data为源的DataFrame,其行标为name和price,列标为1~3
print(frame)

 直接复制这段代码于Python的IDLE,Python.org下载就可以。

如果你和我一样使用macOS,打开Terminal,输入Python并回车。

将以上代码键入即可运行~

使用Windows的朋友可以到Python.org下载一个IDLE,

同样的键入代码运行即可。

 

你会得到这样的运行结果:

python dataframe保存成h5 python存储dataframe_数学统计与筛选_02

可以输入frame.index,或frame.columns快速获取列标与行标。

接下来揭示Python的效率精妙之处:

如果你想找出所有的价格,只需要键入 frame.price ,即可得到所有的价格。

同样的,只需要输入frame.name,即可得到所有的名字。

如果你想把name列全部改为 ‘SCAR~’,键入 frame['name']='SCAR~' 回车即可。

假设你有一个几万人的公司,有天想整理一个名单列表。如果用EXCEL,一般的电脑估计操作起来会很卡。

而你需要做的只是在命令行里输入:

company.name

回车即可~

DataFrame还有很多奇妙的函数,上面列出的部分。实际上是一个庞大的函数集合体。

如果你开始对Python感兴趣,切记不要造轮子~很多方法,前人已经实现,调用就可以了。(笔者平均每天造5个轮子cry~)

 

意犹未尽,不够深度?

下篇文章介绍DataFrame进阶教程,彻底吃透DataFrame库。