版本 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]
带有
category
数据类型的 Series 中的唯一性错误,无论这些类别是否“使用”,都会返回所有类别(讨论见 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
不再支持out
和keepdims
参数,这些参数是为了与 ndarray 兼容而存在的。各种索引类型不再支持all
和any
聚合函数,现在会引发TypeError
。(GH 8302)。允许对具有分类数据类型和对象数据类型的 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)修复基于标签的切片对负步长的支持 (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
增强功能:
在
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)。在公共API中添加了
Timedelta.to_timedelta64()
方法 (GH 8884)。在 gbq 模块中添加了
gbq.generate_bq_schema()
函数 (GH 8325)。Series
现在以与生成器相同的方式与映射对象一起工作(GH 8909)。为
HDFStore
添加了上下文管理器以实现自动关闭 (GH 8791)。to_datetime
获得了一个exact
关键字,允许提供的格式字符串不需要完全匹配(如果其为False
)。exact
默认为 ``True``(意味着完全匹配仍然是默认设置) (GH 8904)在 parallel_coordinates 绘图函数中添加了
axvlines
布尔选项,用于确定是否打印垂直线,默认为 True增加了读取表格脚注的能力到 read_html (GH 8552)
to_sql
现在推断包含 NA 值且具有 dtypeobject
的列的非 NA 值的数据类型 (GH 8778)。
性能#
错误修复#
在连接
category
dtype 的 Series 时,强制转换为object
的 Bug。(GH 8641)时间戳-时间戳中的错误未返回 Timedelta 类型,并且带时区的日期型-日期型操作 (GH 8865)
修复了一个时区不匹配的异常(无论是与 None 操作的 tz 还是不兼容的时区),现在将返回
TypeError
而不是 ``ValueError``(仅限于几个边缘情况),(GH 8865)在使用
pd.Grouper(key=...)
时没有 level/axis 或只有 level 的错误 (GH 8795, GH 8866)当在 groupby 中传递无效/无参数时报告
TypeError
(GH 8015)groupby
签名中未包含 *args 或 **kwargs 的错误 (GH 8733)。io.data.Options
当从Yahoo获取不到到期日期时,以及当从Yahoo获取不到数据时,现在会引发RemoteDataError
(GH 8761), (GH 8783)。在传递 dtype 和 names 并且解析的数据是不同数据类型时,csv 解析中的不明确错误消息 (GH 8833)
使用空列表和至少一个布尔索引器对 MultiIndex 进行切片时出现错误 (GH 8781)
io.data.Options
现在在从 Yahoo 获取不到到期日期时会引发RemoteDataError
(GH 8761)。Timedelta
关键字参数现在可以是 numpy 整数和浮点数 (GH 8757)。sql_schema
现在生成适合方言的CREATE TABLE
语句 (GH 8697)slice
字符串方法现在考虑了步长 (GH 8754)在
BlockManager
中设置不同类型的值会破坏块完整性的错误 (GH 8850)使用
time
对象作为键时DatetimeIndex
中的错误 (GH 8667)merge
中的一个错误,当how='left'
和sort=False
时不会保留左帧顺序 (GH 7331)MultiIndex.reindex
中的错误,在级别上重新索引时不会重新排序标签 (GH 4088)在使用 dateutil 时区的某些操作中存在错误,在使用 dateutil 2.3 时表现出来 (GH 8639)
使用固定/本地偏移时区时 DatetimeIndex 迭代中的回归 (GH 8890)
在
to_datetime
解析纳秒时使用%f
格式时出现的错误 (GH 8989)io.data.Options
当从Yahoo获取不到到期日期时,以及当从Yahoo获取不到数据时,现在会引发RemoteDataError
(GH 8761), (GH 8783)。修复:字体大小仅在垂直时设置在 x 轴上,在水平时设置在 y 轴上。(GH 8765)
在读取大csv文件时修复了python 3中的除以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 的
columns
是一个MultiIndex
,其labels
不引用其所有levels
时,DataFrame.stack(..., dropna=False)
中的错误。(GH 8844)该选项上下文在
__enter__
中应用的错误 (GH 8514)在重采样时导致跨多天重采样且最后一个偏移量不是从范围开始计算时引发 ValueError 的错误 (GH 8683)
当检查一个 np.array 是否在 DataFrame 中时,
DataFrame.plot(kind='scatter')
失败的错误 (GH 8852)pd.infer_freq/DataFrame.inferred_freq
中的一个错误,当索引包含夏令时天数时,阻止了适当的子日频率推断 (GH 8772)。在绘制一个系列时,当
use_index=False
时仍然使用索引名称的错误 (GH 8558)。尝试堆叠多列时出现错误,当某些(或所有)层级名称是数字时 (GH 8584)。
MultiIndex
中的一个错误,当索引未按词法排序或不唯一时,__contains__
返回错误结果 (GH 7724)在
Timestamp
中的回归不会解析 ‘Z’ 时区标识符用于 UTC (GH 8771)StataWriter
中的错误,无论实际大小如何,都会写入包含244个字符的字符串 (GH 8969)修复了当 datetime64 系列包含 NaT 时 cummin/cummax 引发的 Fixed 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 +