版本 0.15.2(2014年12月12日)#
这是 0.15.1 的一个次要版本,包含大量错误修复以及一些新特性、增强功能和性能改进。为修复现有错误,进行了一些 API 更改。我们建议所有用户升级到此版本。
API 变更#
现在支持超出词典序深度对
MultiIndex进行索引,但词典序索引将具有更好的性能。 (GH 2646)In [1]: df = pd.DataFrame({'jim':[0, 0, 1, 1], ...: 'joe':['x', 'x', 'z', 'y'], ...: 'jolie':np.random.rand(4)}).set_index(['jim', 'joe']) ...: In [2]: df Out[2]: jolie jim joe 0 x 0.126970 x 0.966718 1 z 0.260476 y 0.897237 [4 rows x 1 columns] In [3]: df.index.lexsort_depth Out[3]: 1 # in prior versions this would raise a KeyError # will now show a PerformanceWarning In [4]: df.loc[(1, 'z')] Out[4]: jolie jim joe 1 z 0.260476 [1 rows x 1 columns] # lexically sorting In [5]: df2 = df.sort_index() In [6]: df2 Out[6]: jolie jim joe 0 x 0.126970 x 0.966718 1 y 0.897237 z 0.260476 [4 rows x 1 columns] In [7]: df2.index.lexsort_depth Out[7]: 2 In [8]: df2.loc[(1,'z')] Out[8]: jolie jim joe 1 z 0.260476 [1 rows x 1 columns]
修复了 Series 唯一值(`unique`)在
category数据类型下的错误,之前它会返回所有类别,无论它们是否“被使用”(详见 GH 8559 中的讨论)。之前的行为是返回所有类别。In [3]: cat = pd.Categorical(['a', 'b', 'a'], categories=['a', 'b', 'c']) In [4]: cat Out[4]: [a, b, a] Categories (3, object): [a < b < c] In [5]: cat.unique() Out[5]: array(['a', 'b', 'c'], dtype=object)
现在,只返回实际出现在数组中的类别。
In [1]: cat = pd.Categorical(['a', 'b', 'a'], categories=['a', 'b', 'c']) In [2]: cat.unique() Out[2]: ['a', 'b'] Categories (3, object): ['a', 'b', 'c']
Series.all和Series.any现在支持level和skipna参数。Series.all、Series.any、Index.all和Index.any不再支持为与 ndarray 兼容而存在的out和keepdims参数。各种索引类型不再支持all和any聚合函数,现在将引发TypeError。 (GH 8302)。允许分类数据类型(categorical dtype)和对象数据类型(object dtype)的 Series 进行相等性比较;以前这些操作会引发
TypeError(GH 8938)。修复了
NDFrame中的错误:现在,冲突的属性/列名称在获取和设置时的行为保持一致。以前,当同时存在名为y的列和属性时,data.y会返回属性,而data.y = z会更新列 (GH 8994)。In [3]: data = pd.DataFrame({'x': [1, 2, 3]}) In [4]: data.y = 2 In [5]: data['y'] = [2, 4, 6] In [6]: data Out[6]: x y 0 1 2 1 2 4 2 3 6 [3 rows x 2 columns] # this assignment was inconsistent In [7]: data.y = 5
旧行为
In [6]: data.y Out[6]: 2 In [7]: data['y'].values Out[7]: array([5, 5, 5])
新行为
In [8]: data.y Out[8]: 5 In [9]: data['y'].values Out[9]: array([2, 4, 6])
Timestamp('now')现在等同于Timestamp.now(),因为它返回本地时间而非 UTC 时间。此外,Timestamp('today')现在等同于Timestamp.today(),并且两者都支持tz参数。 (GH 9000)修复了基于标签的切片对负步长(negative step)的支持问题 (GH 8753)。
旧行为
In [1]: s = pd.Series(np.arange(3), ['a', 'b', 'c']) Out[1]: a 0 b 1 c 2 dtype: int64 In [2]: s.loc['c':'a':-1] Out[2]: c 2 dtype: int64
新行为
In [10]: s = pd.Series(np.arange(3), ['a', 'b', 'c']) In [11]: s.loc['c':'a':-1] Out[11]: c 2 b 1 a 0 Length: 3, dtype: int64
增强功能#
Categorical 增强功能
增加了将分类数据导出到 Stata 的功能 (GH 8633)。有关导出到 Stata 数据文件的分类变量的限制,请参阅此处。
为
StataReader和read_stata添加了order_categoricals标志,用于选择是否对导入的分类数据进行排序 (GH 8836)。有关从 Stata 数据文件导入分类变量的更多信息,请参阅此处。增加了将分类数据导入/导出到 HDF5 的功能 (GH 7621)。查询方式与对象数组相同。但是,
category数据类型的数据以更高效的方式存储。有关示例以及与之前 pandas 版本相关的注意事项,请参阅此处。增加了对
Categorical类中的searchsorted()方法的支持 (GH 8420)。
其他增强功能
增加了在将 DataFrame 写入数据库时指定列的 SQL 类型的功能 (GH 8778)。例如,可以指定对字符串列使用 sqlalchemy 的
String类型而不是默认的Text类型。from sqlalchemy.types import String data.to_sql('data_dtype', engine, dtype={'Col_1': String}) # noqa F821
Series.all和Series.any现在支持level和skipna参数 (GH 8302)>>> s = pd.Series([False, True, False], index=[0, 0, 1]) >>> s.any(level=0) 0 True 1 False dtype: bool
Panel现在支持all和any聚合函数。 (GH 8302)>>> p = pd.Panel(np.random.rand(2, 5, 4) > 0.1) >>> p.all() 0 1 2 3 0 True True True True 1 True False True True 2 True True True True 3 False True False True 4 True True True True
增加了对
Timestamp类中utcfromtimestamp()、fromtimestamp()和combine()方法的支持 (GH 5351)。在未知情况下,
Timedelta算术运算返回NotImplemented,允许自定义类进行扩展 (GH 8813)。Timedelta现在支持与适当数据类型(仅限 numpy 1.8 或更高版本)的numpy.ndarray对象进行算术运算 (GH 8884)。将
Timedelta.to_timedelta64()方法添加到公共 API 中 (GH 8884)。将
gbq.generate_bq_schema()函数添加到 gbq 模块中 (GH 8325)。Series现在与 map 对象的工作方式与生成器相同 (GH 8909)。为
HDFStore增加了上下文管理器以实现自动关闭 (GH 8791)。to_datetime增加了exact关键字,允许格式不要求与提供的格式字符串完全匹配(如果其为False)。exact默认为True(这意味着精确匹配仍然是默认行为) (GH 8904)。为 parallel_coordinates 绘图函数添加了布尔选项
axvlines,它决定是否打印垂直线,默认为 True。增加了 read_html 读取表格页脚的功能 (GH 8552)。
to_sql现在会推断包含 NA 值且数据类型为object的列中非 NA 值的数据类型 (GH 8778)。
性能#
错误修复#
修复了
category数据类型的 Series 进行 concat 操作时被强制转换为object的错误。 (GH 8641)修复了 Timestamp-Timestamp 操作不返回 Timedelta 类型以及带有时区的日期类型操作的错误 (GH 8865)。
统一了时区不匹配异常(tz 与 None 操作或不兼容时区),现在将返回
TypeError而不是ValueError(仅限少数边缘情况),(GH 8865)。修复了使用没有级别/轴或仅有级别的
pd.Grouper(key=...)时的错误 (GH 8795, GH 8866)。当在 groupby 中传递无效/无参数时报告
TypeError(GH 8015)。修复了
groupby签名中未包含 *args 或 **kwargs 的错误 (GH 8733)。当 Yahoo 没有到期日期可用以及从 Yahoo 未收到数据时,
io.data.Options现在会引发RemoteDataError(GH 8761), (GH 8783)。修复了 CSV 解析中当传递 dtype 和 names 且解析数据是不同数据类型时错误消息不明确的错误 (GH 8833)。
修复了使用空列表和至少一个布尔索引器对 MultiIndex 进行切片时的错误 (GH 8781)。
当 Yahoo 没有到期日期可用时,
io.data.Options现在会引发RemoteDataError(GH 8761)。Timedelta的 kwargs 现在可以是 numpy 整数和浮点数 (GH 8757)。sql_schema现在生成适合方言的CREATE TABLE语句 (GH 8697)。slice字符串方法现在考虑了步长 (GH 8754)。修复了
BlockManager中,设置不同类型的值会破坏块完整性的错误 (GH 8850)。修复了在
DatetimeIndex中使用time对象作为键时的错误 (GH 8667)。修复了
merge中当how='left'且sort=False时无法保留左侧 frame 顺序的错误 (GH 7331)。修复了
MultiIndex.reindex中在某个级别进行 reindex 操作时不会重新排序标签的错误 (GH 4088)。修复了 dateutil 时区在某些操作中的错误,表现为 dateutil 2.3 中的问题 (GH 8639)。
修复了带固定/本地偏移时区的 DatetimeIndex 迭代中的回归错误 (GH 8890)。
修复了
to_datetime在使用%f格式解析纳秒时的错误 (GH 8989)。当 Yahoo 没有到期日期可用以及从 Yahoo 未收到数据时,
io.data.Options现在会引发RemoteDataError(GH 8761), (GH 8783)。修复:字体大小仅在垂直时设置在 x 轴上,或在水平时设置在 y 轴上。 (GH 8765)。
修复了在 Python 3 中读取大型 CSV 文件时出现除以 0 的错误 (GH 8621)。
修复了使用
to_html,index=False输出 MultiIndex 时会额外添加一列的错误 (GH 8452)。从 Stata 文件导入的分类变量保留了底层数据中的序数信息 (GH 8836)。
定义了
NDFrame对象上的.size属性,以提供与 numpy >= 1.9.1 的兼容性;在使用np.array_split时存在错误 (GH 8846)。跳过 matplotlib <= 1.2 的直方图绘图测试 (GH 8648)。
修复了
get_data_google返回对象数据类型的错误 (GH 3995)。修复了
DataFrame.stack(..., dropna=False)中的错误,当 DataFrame 的columns是一个MultiIndex且其labels未引用其所有levels时。 (GH 8844)。修复了 Option 上下文在
__enter__上应用时的错误 (GH 8514)。修复了 resample 中的一个错误,当跨多天重采样且最后一个偏移量未从范围起点计算时,会导致 ValueError (GH 8683)。
修复了
DataFrame.plot(kind='scatter')在检查 np.array 是否在 DataFrame 中时失败的错误 (GH 8852)。修复了
pd.infer_freq/DataFrame.inferred_freq中的错误,该错误在索引包含夏令时(DST)天时阻止了正确的次日频率推断 (GH 8772)。修复了在使用
use_index=False绘制 Series 时仍使用索引名称的错误 (GH 8558)。修复了尝试堆叠多列时,当某些(或所有)级别名称为数字时的错误 (GH 8584)。
修复了
MultiIndex中,如果索引不是词典序排序或唯一时,__contains__返回错误结果的错误 (GH 7724)。修复了
Timestamp中无法解析 UTC 的 'Z' 时区指示符的回归错误 (GH 8771)。修复了
StataWriter中的错误,它会写入 244 个字符的字符串,无论实际大小如何 (GH 8969)。修复了当 datetime64 Series 包含 NaT 时,cummin/cummax 引发的 ValueError 错误。 (GH 8965)。
修复了 DataReader 在存在缺失值时返回对象数据类型的错误 (GH 8980)。
修复了绘图中的一个错误,如果启用了 sharex 且索引是时间序列,则会在多个轴上显示标签 (GH 3964)。
修复了向 TimedeltaIndex 构造函数传递单位时,纳秒转换被应用了两次的错误。 (GH 9011)。
修复了绘制类周期数组时的错误 (GH 9012)。
贡献者#
共有 49 人为本次发布贡献了补丁。名字旁边带有“+”的人是首次贡献补丁。
Aaron Staple
Angelos Evripiotis +
Artemy Kolchinsky
Benoit Pointet +
Brian Jacobowski +
Charalampos Papaloizou +
Chris Warth +
David Stephens
Fabio Zanini +
Francesc Via +
Henry Kleynhans +
Jake VanderPlas +
Jan Schulz
Jeff Reback
Jeff Tratner
Joris Van den Bossche
Kevin Sheppard
Matt Suggit +
Matthew Brett
Phillip Cloud
Rupert Thompson +
Scott E Lasley +
Stephan Hoyer
Stephen Simmons +
Sylvain Corlay +
Thomas Grainger +
Tiago Antao +
Tom Augspurger
Trent Hauck
Victor Chaves +
Victor Salgado +
Vikram Bhandoh +
WANG Aiyong
Will Holmgren +
behzad nouri
broessli +
charalampos papaloizou +
immerrr
jnmclarty
jreback
mgilbert +
onesandzeroes
peadarcoyle +
rockg
seth-p
sinhrks
unutbu
wavedatalab +
Åsmund Hjulstad +