//此文档的目的是帮助更多初学Python的Programmers少造轮子,致力于顺藤摸瓜。因水平所限,如有缺漏以及不严谨之处,请各位多多指教。
//任何人都可以轻而易举地掌握DataFrame。你所需要的只是一个脑子,和有记事本程序的电脑。
什么是DataFrame?
首先给出官网的定义,是不是有点眼熟?
没错,它就是来源于大名鼎鼎pandas库的内建方法。
首先我们先搞清楚它是做什么的?在入门阶段,我们简单把它理解为一个表格型数据结构。
它含有一组有序的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 |
现在,尝试写一个简单的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,
同样的键入代码运行即可。
你会得到这样的运行结果:
可以输入frame.index,或frame.columns快速获取列标与行标。
接下来揭示Python的效率精妙之处:
如果你想找出所有的价格,只需要键入 frame.price ,即可得到所有的价格。
同样的,只需要输入frame.name,即可得到所有的名字。
如果你想把name列全部改为 ‘SCAR~’,键入 frame['name']='SCAR~' 回车即可。
假设你有一个几万人的公司,有天想整理一个名单列表。如果用EXCEL,一般的电脑估计操作起来会很卡。
而你需要做的只是在命令行里输入:
company.name
回车即可~
DataFrame还有很多奇妙的函数,上面列出的部分。实际上是一个庞大的函数集合体。
如果你开始对Python感兴趣,切记不要造轮子~很多方法,前人已经实现,调用就可以了。(笔者平均每天造5个轮子cry~)
意犹未尽,不够深度?
下篇文章介绍DataFrame进阶教程,彻底吃透DataFrame库。