版本 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.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 轴上进行对数缩放 添加 index和header选项 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 人为此版本贡献了补丁。名字带有“+”的人首次贡献了补丁。 亚当·克莱因 贝尔·香克斯 + 克里斯·比林顿 + 迪特·范登布斯切 法布里齐奥·波拉斯特里 + 格雷厄姆·泰勒 + 格雷格·林德+ 乔什·克莱因 + 卢卡·贝尔特拉姆 奥利维尔·格里塞尔 + 船长西博尔德 托马斯·克鲁弗 托马斯·维茨基 + 韦斯·麦金尼 沃特·奥弗迈尔 雅罗斯拉夫·哈尔琴科 法布里齐奥普 + 泰安迪格罗斯 +