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

新功能#

  • 新的统一 合并函数 用于高效执行全范围的数据库/关系代数操作。重构了现有的连接方法以使用新的基础设施,从而实现了显著的性能提升 (GH 220, GH 249, GH 267)

  • 新的 统一连接函数 用于沿一个轴连接 Series、DataFrame 或 Panel 对象。可以形成其他轴的并集或交集。改进了 Series.appendDataFrame.append 的性能 (GH 468, GH 479, GH 273)

  • 可以将多个 DataFrame 传递给 DataFrame.append 进行连接(堆叠),也可以将多个 Series 传递给 Series.append 进行连接。

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

  • 你现在可以通过 __getitem__ 在 DataFrame 中 设置多列 ,这对于转换非常有用 (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 方法到 Series 和 DataFrame (GH 534)

  • 添加 类似字典的 get 函数到 DataFrame 和 Panel (GH 521)

  • 添加 DataFrame.iterrows 方法,用于高效地遍历 DataFrame 的行。

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

  • 添加 reindex_axis 方法添加到 DataFrame

  • 添加 level 选项到 DataFrameSeries 上的二元算术函数

  • 添加 level 选项到 reindexalign 方法在 Series 和 DataFrame 上,用于在级别上广播值 (GH 542, GH 552, 其他)

  • 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 以允许不同的列标题对齐方式

  • 添加 sort 选项到 GroupBy 以允许禁用对组键的排序,以潜在地加速 (GH 595)

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

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

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

  • 可以在 DataFrame 上使用 groupby 传递一个 函数列表 进行聚合,生成具有分层列的聚合结果 (GH 166)

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

  • value_range 作为一个实用函数被添加,用于获取数据帧的最小值和最大值 (GH 288)

  • read_csvread_tableto_csvfrom_csv 添加了 encoding 参数,用于非ASCII文本 (GH 717)

  • 新增 abs 方法到 pandas 对象

  • 新增 crosstab 函数,用于轻松计算频率表

  • 新增 isin 方法到索引对象

  • 添加 level 参数到 DataFrame 的 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

对 Series [] 操作符的更改#

为了符号上的方便,您可以通过 []``(即 ``__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 类已被完全移除

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

  • 杂项重命名和弃用,这些将(无害地)引发 FutureWarning

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

性能提升#

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

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

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

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

  • 在 Series.to_string 中默认不打印长度,添加 length 选项 (GH 489)

  • 改进 Cython 代码以在无需排序数据的情况下进行多组聚合 (GH 93)

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

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

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

  • 在某些情况下避免创建索引字典(例如在获取切片等时),这是从先前版本回归的问题

  • 如果在 setup.py 中未安装 NumPy,则显示更友好的错误消息

  • 在 Panel 类中也使用常见的 NA 处理操作(sum、mean 等)(GH 536)

  • 在调用 reset_index 时,对具有常规(非分层)索引的 DataFrame 进行默认名称分配 (GH 476)

  • 在传递 level 参数的 Series/DataFrame 统计操作中,尽可能使用 Cythonized 分组器 (GH 545)

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

贡献者#

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

  • Adam Klein

  • Bayle Shanks +

  • Chris Billington +

  • Dieter Vandenbussche

  • Fabrizio Pollastri +

  • Graham Taylor +

  • Gregg Lind +

  • Josh Klein +

  • Luca Beltrame

  • Olivier Grisel +

  • Skipper Seabold

  • Thomas Kluyver

  • Thomas Wiecki +

  • Wes McKinney

  • Wouter Overmeire

  • Yaroslav Halchenko

  • fabriziop +

  • theandygross +