版本 0.7.0(2012 年 2 月 9 日)#

新功能

  • 新的统一合并功能可有效执行全部数据库/关系代数操作。重构现有的连接方法以使用新的基础设施,从而显着提高性能(GH 220GH 249GH 267

  • 新的统一串联函数,用于沿轴串联 Series、DataFrame 或 Panel 对象。可以形成其他轴的并集或交集。提高Series.appendDataFrame.appendGH 468GH 479GH 273)的性能

  • 可以传递多个 DataFrame 来 DataFrame.append连接(堆栈),也可以传递多个 Series.appendSeries

  • 可以将字典列表(例如 JSON 对象列表)传递给 DataFrame 构造函数 ( GH 526 )

  • 您现在可以通过在 DataFrame 中设置多个列__getitem__,这对于转换很有用(GH 342

  • DataFrame.apply处理( GH 498 )中不同索引的输出值

In [1]: df = pd.DataFrame(np.random.randn(10, 4))
In [2]: df.apply(lambda x: x.describe())
Out[2]:
               0          1          2          3
count  10.000000  10.000000  10.000000  10.000000
mean    0.190912  -0.395125  -0.731920  -0.403130
std     0.730951   0.813266   1.112016   0.961912
min    -0.861849  -2.104569  -1.776904  -1.469388
25%    -0.411391  -0.698728  -1.501401  -1.076610
50%     0.380863  -0.228039  -1.191943  -1.004091
75%     0.658444   0.057974  -0.034326   0.461706
max     1.212112   0.577046   1.643563   1.071804

[8 rows x 4 columns]
  • reorder_levels方法添加到系列和数据帧( GH 534

  • 将类似字典的功能添加get到 DataFrame 和 Panel ( GH 521 )

  • 添加 DataFrame.iterrows有效迭代 DataFrame 行的方法

  • 添加DataFrame.to_panel改编自的代码 LongPanel.to_long

  • 添加 reindex_axis方法添加到DataFrame

  • 为和level上的二进制算术函数 添加选项DataFrameSeries

  • 向 Series 和 DataFrame 上的和方法添加level选项,以便跨级别广播值( GH 542 GH 552等)reindexalign

  • 添加基于属性的项目访问 Panel并添加 IPython 补全 ( GH 563 )

  • 添加 logy选项以Series.plot在 Y 轴上进行对数缩放

  • 添加 indexheader选项 DataFrame.to_string

  • 可以传递多个 DataFrame 来 DataFrame.join连接索引 ( GH 115 )

  • 可以将多个面板传递到Panel.join GH 115

  • 添加了 justify参数以DataFrame.to_string 允许列标题的不同对齐方式

  • 向 GroupBy添加 sort选项以允许禁用组键排序以实现潜在的加速( GH 595

  • 可以将 MaskedArray 传递给 Series 构造函数( GH 563

  • 通过属性和 IPython 完成添加面板项目访问(GH 554

  • 实现DataFrame.lookup奇特的索引模拟,用于检索给定行和列标签序列的值(GH 338

  • 可以传递函数列表以与 DataFrame 上的 groupby 进行聚合,从而生成具有分层列的聚合结果 ( GH 166 )

  • 可以在 Series 和 DataFrame 上调用cumminandcummax来分别获取累积最小值和最大值(GH 647

  • value_range添加为实用函数以获取数据帧的最小值和最大值(GH 288

  • 为非 ascii 文本添加了encoding参数read_csv, read_table,to_csv和 ( GH 717 )from_csv

  • abs向 pandas 对象添加了方法

  • 增加了 crosstab轻松计算频数表的功能

  • 添加了 isin索引对象的方法

  • 向DataFrame 方法添加了level参数xs

API 对整数索引的更改#

0.7.0 中潜在风险最大的 API 更改之一,但也是最重要的更改之一,是对基于标签的索引如何处理整数索引的全面审查。这是一个例子:

In [3]: s = pd.Series(np.random.randn(10), index=range(0, 20, 2))
In [4]: s
Out[4]:
0    -1.294524
2     0.413738
4     0.276662
6    -0.472035
8    -0.013960
10   -0.362543
12   -0.006154
14   -0.923061
16    0.895717
18    0.805244
Length: 10, dtype: float64

In [5]: s[0]
Out[5]: -1.2945235902555294

In [6]: s[2]
Out[6]: 0.41373810535784006

In [7]: s[4]
Out[7]: 0.2766617129497566

这与之前的行为完全相同。但是,如果您请求Series 中 未包含的密钥,则在 0.6.1 及之前的版本中,Series 将依靠基于位置的查找。现在这提出了KeyError

In [2]: s[1]
KeyError: 1

这一变化对 DataFrame 也有同样的影响:

In [3]: df = pd.DataFrame(np.random.randn(8, 4), index=range(0, 16, 2))

In [4]: df
    0        1       2       3
0   0.88427  0.3363 -0.1787  0.03162
2   0.14451 -0.1415  0.2504  0.58374
4  -1.44779 -0.9186 -1.4996  0.27163
6  -0.26598 -2.4184 -0.2658  0.11503
8  -0.58776  0.3144 -0.8566  0.61941
10  0.10940 -0.7175 -1.0108  0.47990
12 -1.16919 -0.3087 -0.6049 -0.43544
14 -0.07337  0.3410  0.0424 -0.16037

In [5]: df.ix[3]
KeyError: 3

为了支持纯粹基于整数的索引,添加了以下方法:

方法

描述

Series.iget_value(i)

检索存储在位置的值i

Series.iget(i)

别名为iget_value

DataFrame.irow(i)

检索i第-行

DataFrame.icol(j)

检索j第 -th 列

DataFrame.iget_value(i, j)

i检索行和列的值j

关于基于标签的切片的 API 调整#

现在使用基于标签的切片ix要求对索引进行排序(单调),除非索引中包含起点和终点:

In [1]: s = pd.Series(np.random.randn(6), index=list('gmkaec'))

In [2]: s
Out[2]:
g   -1.182230
m   -0.276183
k   -0.243550
a    1.628992
e    0.073308
c   -0.539890
dtype: float64

那么这样就可以了:

In [3]: s.ix['k':'e']
Out[3]:
k   -0.243550
a    1.628992
e    0.073308
dtype: float64

但这不是:

In [12]: s.ix['b':'h']
KeyError 'b'

如果索引已排序,则“范围选择”是可能的:

In [4]: s2 = s.sort_index()

In [5]: s2
Out[5]:
a    1.628992
c   -0.539890
e    0.073308
g   -1.182230
k   -0.243550
m   -0.276183
dtype: float64

In [6]: s2.ix['b':'h']
Out[6]:
c   -0.539890
e    0.073308
g   -1.182230
dtype: float64

[]系列运算符的更改#

[]为了方便表示,您可以在通过(即 __getitem____setitem__方法)获取和设置值时将一系列标签或标签切片传递给 Series 。其行为与传递类似的输入相同,ix 但在整数索引的情况下除外

In [8]: s = pd.Series(np.random.randn(6), index=list('acegkm'))

In [9]: s
Out[9]:
a   -1.206412
c    2.565646
e    1.431256
g    1.340309
k   -1.170299
m   -0.226169
Length: 6, dtype: float64

In [10]: s[['m', 'a', 'c', 'e']]
Out[10]:
m   -0.226169
a   -1.206412
c    2.565646
e    1.431256
Length: 4, dtype: float64

In [11]: s['b':'l']
Out[11]:
c    2.565646
e    1.431256
g    1.340309
k   -1.170299
Length: 4, dtype: float64

In [12]: s['c':'k']
Out[12]:
c    2.565646
e    1.431256
g    1.340309
k   -1.170299
Length: 4, dtype: float64

在整数索引的情况下,行为将与以前完全相同(阴影ndarray):

In [13]: s = pd.Series(np.random.randn(6), index=range(0, 12, 2))

In [14]: s[[4, 0, 2]]
Out[14]:
4    0.132003
0    0.410835
2    0.813850
Length: 3, dtype: float64

In [15]: s[1:5]
Out[15]:
2    0.813850
4    0.132003
6   -0.827317
8   -0.076467
Length: 4, dtype: float64

如果您希望使用序列进行索引并使用标签语义对整数索引进行切片,请使用ix.

其他 API 更改#

  • 已弃用的LongPanel类已被完全删除

  • 如果Series.sort在 DataFrame 的列上调用,现在将引发异常。在可能通过执行df[col].sort()而不是无副作用方法 df[col].order()GH 316)来意外改变 DataFrame 的列之前

  • 各种重命名和弃用将(无害地)引发 FutureWarning

  • drop作为可选参数添加到DataFrame.reset_index( GH 699 )

性能改进#

  • Cythonized GroupBy 聚合不再对数据进行预排序,从而实现显着的加速( GH 93)。通过在 Cython ( GH 496 )中巧妙地操作 ndarray 数据类型,Python 函数的 GroupBy 聚合显着加快

  • 当传递的列标签与数据不匹配时,DataFrame 构造函数中出现更好的错误消息(GH 497

  • 当传递 Python 函数时,大幅提高多 GroupBy 聚合的性能,在 Cython 中重用 ndarray 对象(GH 496

  • 可以在 HDFStore ( GH 492 )中存储由元组和浮点数索引的对象

  • 默认情况下不打印 Series.to_string 中的长度,添加length选项(GH 489

  • 改进 Cython 代码以进行多分组聚合,而无需对数据进行排序 ( GH 93 )

  • 通过在 MultiIndex 中存储元组来提高 MultiIndex 重新索引速度,测试向后 unpickling 兼容性

  • 使用专门的 Cython take 函数提高列重新索引性能

  • 针对标准用例进一步调整 Series.__getitem__ 的性能

  • 在某些情况下(即获取切片等时)避免创建索引字典,从先前版本回归

  • 如果未安装 NumPy,setup.py 中会出现更友好的错误消息

  • 在Panel类中也使用一组通用的NA处理操作(总和,平均值等)(GH 536

  • reset_index使用常规(非分层)索引(GH 476)调用 DataFrame 时的默认名称分配

  • 尽可能在系列/数据帧统计操作中使用 Cythonized 石斑鱼并 level传递参数(GH 545

  • rolling_median将跳表数据结构移植到 C 语言,在大多数典型用例中加速约 5-10 倍 ( GH 374 )

贡献者#

共有 18 人为此版本贡献了补丁。名字带有“+”的人首次贡献了补丁。

  • 亚当·克莱因

  • 贝尔·香克斯 +

  • 克里斯·比林顿 +

  • 迪特·范登布斯切

  • 法布里齐奥·波拉斯特里 +

  • 格雷厄姆·泰勒 +

  • 格雷格·林德+

  • 乔什·克莱因 +

  • 卢卡·贝尔特拉姆

  • 奥利维尔·格里塞尔 +

  • 船长西博尔德

  • 托马斯·克鲁弗

  • 托马斯·维茨基 +

  • 韦斯·麦金尼

  • 沃特·奥弗迈尔

  • 雅罗斯拉夫·哈尔琴科

  • 法布里齐奥普 +

  • 泰安迪格罗斯 +