版本 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.append
SeriesDataFrame.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
向 Series 和 DataFrame 上的和方法添加
level
选项,以便跨级别广播值( GH 542、 GH 552等)reindex
align
添加基于属性的项目访问
Panel
并添加 IPython 补全 ( GH 563 )添加
logy
选项以Series.plot
在 Y 轴上进行对数缩放添加
index
和header
选项DataFrame.to_string
添加了
justify
参数以DataFrame.to_string
允许列标题的不同对齐方式向 GroupBy添加
sort
选项以允许禁用组键排序以实现潜在的加速( GH 595)通过属性和 IPython 完成添加面板项目访问(GH 554)
实现
DataFrame.lookup
奇特的索引模拟,用于检索给定行和列标签序列的值(GH 338)可以传递函数列表以与 DataFrame 上的 groupby 进行聚合,从而生成具有分层列的聚合结果 ( GH 166 )
可以在 Series 和 DataFrame 上调用
cummin
andcummax
来分别获取累积最小值和最大值(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
为了支持纯粹基于整数的索引,添加了以下方法:
方法 |
描述 |
---|---|
|
检索存储在位置的值 |
|
别名为 |
|
检索 |
|
检索 |
|
|
关于基于标签的切片的 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 更改#
性能改进#
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 人为此版本贡献了补丁。名字带有“+”的人首次贡献了补丁。
亚当·克莱因
贝尔·香克斯 +
克里斯·比林顿 +
迪特·范登布斯切
法布里齐奥·波拉斯特里 +
格雷厄姆·泰勒 +
格雷格·林德+
乔什·克莱因 +
卢卡·贝尔特拉姆
奥利维尔·格里塞尔 +
船长西博尔德
托马斯·克鲁弗
托马斯·维茨基 +
韦斯·麦金尼
沃特·奥弗迈尔
雅罗斯拉夫·哈尔琴科
法布里齐奥普 +
泰安迪格罗斯 +