版本 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 的 unique 方法中的错误,该方法无论类别是否“已使用”都会返回所有类别(参见 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.allSeries.any 现在支持 levelskipna 参数。Series.allSeries.anyIndex.allIndex.any 不再支持 outkeepdims 参数,这些参数是为了与 ndarray 兼容而存在的。各种索引类型不再支持 allany 聚合函数,并且现在将引发 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 增强功能

  • 增加了将 Categorical 数据导出到 Stata 的能力 (GH 8633)。关于导出到 Stata 数据文件的分类变量的限制,请参见此处

  • StataReaderread_stata 添加了标志 order_categoricals,用于选择是否对导入的分类数据进行排序 (GH 8836)。关于从 Stata 数据文件导入分类变量的更多信息,请参见此处

  • 增加了将 Categorical 数据导出到/从 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.allSeries.any 现在支持 levelskipna 参数 (GH 8302)

    >>> s = pd.Series([False, True, False], index=[0, 0, 1])
    >>> s.any(level=0)
    0     True
    1    False
    dtype: bool
    
  • Panel 现在支持 allany 聚合函数。(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)。

  • 添加了 Google Analytics (pandas.io.ga) 基本文档 (GH 8835)。参见此处

  • Timedelta 在未知情况下返回 NotImplemented,允许自定义类进行扩展 (GH 8813)。

  • Timedelta 现在支持与适当数据类型的 numpy.ndarray 对象进行算术运算(仅限 numpy 1.8 或更新版本)(GH 8884)。

  • Timedelta.to_timedelta64() 方法添加到公共 API (GH 8884)。

  • 向 gbq 模块添加了 gbq.generate_bq_schema() 函数 (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)。

性能#

  • 当 read_csv 中的 skiprows 是整数时,减少内存使用 (GH 8681)

  • 当传递 format=exact=False 时,to_datetime 转换的性能提升 (GH 8904)

错误修复#

  • 修复了具有 category 数据类型的 Series 在 concat 时被强制转换为 object 的错误。(GH 8641)

  • 修复了 Timestamp 减去 Timestamp 未返回 Timedelta 类型以及带有时区的时间格式减去时间格式操作的错误 (GH 8865)

  • 使时区不匹配异常保持一致(无论是时区与 None 操作还是不兼容的时区),现在将返回 TypeError 而不是 ValueError(仅在少数边缘情况下),(GH 8865)

  • 修复了使用不带 level/axis 或只带 level 的 pd.Grouper(key=...) 时的错误 (GH 8795, GH 8866)

  • 在 groupby 中传递无效/无参数时报告 TypeError (GH 8015)

  • 修复了使用 py2app/cx_Freeze 打包 pandas 时的错误 (GH 8602, GH 8831)

  • 修复了 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)。

  • 修复了 Timedelta 算术和比较方面的几个未解决的错误 (GH 8813, GH 5963, GH 5436)。

  • sql_schema 现在会生成符合方言的 CREATE TABLE 语句 (GH 8697)

  • slice 字符串方法现在会考虑步长 (GH 8754)

  • 修复了 BlockManager 中,使用不同类型设置值会破坏块完整性的错误 (GH 8850)

  • 修复了在 DatetimeIndex 中使用 time 对象作为键时的错误 (GH 8667)

  • 修复了 merge 中,当 how='left'sort=False 时无法保留左侧帧顺序的错误 (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 的 columns 是一个 MultiIndex,其 labels 未引用所有 levels 时,DataFrame.stack(..., dropna=False) 中的错误。(GH 8844)

  • 修复了 Option 上下文在 __enter__ 上应用时的错误 (GH 8514)

  • 修复了 resample 中的错误,该错误导致在跨多天进行重采样且最后一个偏移量不是从范围开始计算时引发 ValueError (GH 8683)

  • 修复了检查 np.array 是否在 DataFrame 中时 DataFrame.plot(kind='scatter') 失败的错误 (GH 8852)

  • 修复了 pd.infer_freq/DataFrame.inferred_freq 中的错误,该错误阻止了索引包含夏令时日期时正确推断亚日频率 (GH 8772)。

  • 修复了在使用 use_index=False 绘制 Series 时仍使用索引名称的错误 (GH 8558)。

  • 修复了尝试堆叠多列时,某些(或所有)级别名称为数字的错误 (GH 8584)。

  • 修复了 MultiIndex 中,如果索引不是按词典顺序排序或唯一的,__contains__ 返回错误结果的错误 (GH 7724)

  • BUG CSV: 修复了跳过的行中尾随空白字符的问题 (GH 8679), (GH 8661), (GH 8983)

  • 修复了 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 +