版本 0.7.0 (2012年2月9日)#
新功能#
新的统一 合并函数 用于高效执行全范围的数据库/关系代数操作。重构了现有的连接方法以使用新的基础设施,从而实现了显著的性能提升 (GH 220, GH 249, GH 267)
新的 统一连接函数 用于沿一个轴连接 Series、DataFrame 或 Panel 对象。可以形成其他轴的并集或交集。改进了
Series.append
和DataFrame.append
的性能 (GH 468, GH 479, GH 273)可以将多个 DataFrame 传递给
DataFrame.append
进行连接(堆叠),也可以将多个 Series 传递给Series.append
进行连接。在
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]
添加
DataFrame.iterrows
方法,用于高效地遍历 DataFrame 的行。添加
DataFrame.to_panel
,代码改编自LongPanel.to_long
添加
reindex_axis
方法添加到 DataFrame添加
level
选项到DataFrame
和Series
上的二元算术函数添加
level
选项到reindex
和align
方法在 Series 和 DataFrame 上,用于在级别上广播值 (GH 542, GH 552, 其他)向
Panel
添加基于属性的项目访问,并添加 IPython 自动补全 (GH 563)添加
logy
选项到Series.plot
以在Y轴上进行对数缩放添加
index
和header
选项到DataFrame.to_string
新增
justify
参数到DataFrame.to_string
以允许不同的列标题对齐方式通过属性和 IPython 完成添加 Panel 项目访问 (GH 554)
实现
DataFrame.lookup
,用于检索给定行和列标签序列的值的花式索引模拟 (GH 338)可以在 DataFrame 上使用 groupby 传递一个 函数列表 进行聚合,生成具有分层列的聚合结果 (GH 166)
可以在 Series 和 DataFrame 上调用
cummin
和cummax
来分别获取累积最小值和最大值 (GH 647)value_range
作为一个实用函数被添加,用于获取数据帧的最小值和最大值 (GH 288)为
read_csv
、read_table
、to_csv
和from_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
为了支持纯基于整数的索引,添加了以下方法:
方法 |
描述 |
---|---|
|
获取存储在位置 |
|
|
|
获取第 |
|
获取 |
|
获取第 |
关于基于标签的切片的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更改#
性能提升#
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 +