pandas dataframe 文档阅读笔记。
dataframe是一个2维的有标签数据结构,它每一列元素可以是不同的类型。
可以通过行索引或者是列索引对数据进行索引,DataFrame结构的行索引称为index,纵索引称为columns。
可以通过 df.index、df.columns返回df的索引。
可以将dict结构数据转化为DataFrame结构,默认情况下,dict中的keys对应dataframe中的columns。那么index值该怎么办呢?
假设没有对index指定,那么index默认为range(n)
可以在转换时通过index参数对其设定:
In [44]: d = {"one": [1.0, 2.0, 3.0, 4.0], "two": [4.0, 3.0, 2.0, 1.0]} In [45]: pd.DataFrame(d) Out[45]: one two 0 1.0 4.0 1 2.0 3.0 2 3.0 2.0 3 4.0 1.0 In [46]: pd.DataFrame(d, index=["a", "b", "c", "d"]) Out[46]: one two a 1.0 4.0 b 2.0 3.0 c 3.0 2.0 d 4.0 1.0
np.nan 表示缺失值
group by文档翻译:
Group by : 拆分-应用-组合
"group by"使用场景,如下所示:
-
拆分:根据某些标准将数据分组。
-
应用:对每个组的数据分别应用某个函数。
-
汇合:将所有的结果组合,汇总。
其中,最直接的步骤是 1.拆分 步骤。一般情况下,我们希望将数据集分组,并对不同的组进行操作。在使用过程中,我们可以进行以下操作:
-
聚合:计算每个组的统计量,例如:
-
计算每组数据的求和,均值
-
计算每个组的大小
-
-
转换:执行针对于组的计算,并返回一个类似索引的对象,例如:
-
标准化组内的数据
-
用每个组派生的值填充组内的空值(NA)
-
-
过滤:根据筛选规则对每个组进行筛选,丢弃不满足要求的数据组,例如:
-
删除只有少量数据的一组数据。
-
根据组的和或者是组的均值来筛选数据组
-
-
以上三种操作的组合:GroupBy will examine the results of the apply step and try to return a sensibly combined result if it doesn’t fit into either of the above two categories.
我们希望在每个数据组中调用函数,而非整个数据集。所以此处的思想与SQL中的GroupBy是相同的,我们希望你可以在python中编写类似下列代码的处理方式:
SELECT Column1, Column2, mean(Column3), sum(Column4) FROM SomeTable GROUP BY Column1, Column2
我们的目标就是pandas自然的实现上述功能。我们将在各个领域使用pandas,通过一些示例展示其使用方法。
See the cookbook for some advanced strategies.在这里可以看到高级使用方法。
将对象拆分成组
pandas可以在它的任何维度上拆分。对分组抽象的定义提供了一种从标签到组名的映射关系。将一个进行分组,可以有以下操作:
In [1]: df = pd.DataFrame( ...: [ ...: ("bird", "Falconiformes", 389.0), ...: ("bird", "Psittaciformes", 24.0), ...: ("mammal", "Carnivora", 80.2), ...: ("mammal", "Primates", np.nan), ...: ("mammal", "Carnivora", 58), ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], #指定索引名称 ...: columns=("class", "order", "max_speed"), #指定列名 ...: ) ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby("class") In [4]: grouped = df.groupby("order", axis="columns") In [5]: grouped = df.groupby(["class", "order"])
在此处原文有一句这样的话,
default is axis=0
这句话的意思是默认axis=0
那么axis=0指的是什么呢?
axis=0代表行操作
axis=1代表列操作
pandas对关键字axis关键字的用法保持了NumPy的用法:
轴用来为超过一维的数组定义的属性,二维数据拥有两个轴:第0轴沿着行的垂直往下,第1轴沿着列的方向水平延伸。
详细内容可以看这里
这个映射关系可以通过很多方式进行定义:
-
设定一个函数,对每一个axis的label进行操作
-
与所选axis长度的list或者是ndarray
-
dict series 提供label->group name 的映射
-
对于 DataFrame 对象,使用一个字符串,指示要用于分组的列名称或索引级别名称。
-
df.groupby('A')指的是df.groupby(df['A'])
-
上述的组合
我们将分组对象统称为keys。例如:
注意:
使用groupby分组的对象可以是column或者是index。如果该字符串与column的名字或者是index的名字相同,会引发 ValueError
import numpy as np import pandas as pd df = pd.DataFrame( { "A": ["foo", "bar", "foo", "bar"