版本 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]
    
  • 具有 dtype 的 Series 的唯一错误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支持levelskipna参数。Series.allSeries.anyIndex.allIndex.any不再支持outkeepdims参数,这些参数是为了与 ndarray 兼容而存在的。各种索引类型不再支持allany聚合函数,现在将提高TypeError. (GH 8302)。

  • 允许将系列与分类数据类型和对象数据类型进行相等比较;以前这些会引发TypeErrorGH 8938

  • 错误NDFrame:冲突的属性/列名称现在在获取和设置之间表现一致。以前,当名为的列和属性都y存在时,data.y将返回该属性,同时会更新该列(GH 8994data.y = z

    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增强功能:

  • 添加了将分类数据导出到 Stata 的功能(GH 8633)。有关导出到 Stata 数据文件的分类变量的限制,请参阅此处。

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

  • 添加了将分类数据导出到 HDF5 (GH 7621) 或从 HDF5 ( GH 7621 ) 导出的功能。查询的工作方式与对象数组相同。然而,categorydtyped 数据以更有效的方式存储。有关 pandas 早期版本的示例和注意事项,请参阅此处。

  • searchsorted()添加了对课堂Categorical( GH 8420 )的支持。

其他增强功能:

  • 添加了在将 DataFrame 写入数据库时​​指定列的 SQL 类型的功能 ( GH 8778 )。例如,指定使用 sqlalchemyString类型而不是Text字符串列的默认类型:

    from sqlalchemy.types import String
    data.to_sql('data_dtype', engine, dtype={'Col_1': String})  # noqa F821
    
  • Series.all现在Series.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
    
  • utcfromtimestamp()添加了对、fromtimestamp()、 和combine()Timestamp( GH 5351 )的支持。

  • 添加了 Google Analytics ( pandas.io.ga ) 基本文档 ( GH 8835 )。看这里

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

  • Timedelta现在支持使用numpy.ndarray适当 dtype 的对象进行算术(仅限 numpy 1.8 或更高版本)(GH 8884)。

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

  • gbq.generate_bq_schema()向 gbq 模块添加了功能 ( 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_sqlobject现在为包含 NA 值且具有 dtype ( GH 8778 )的列推断非 NA 值的数据类型。

表现

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

  • to_datetime通过传递的转换性能提升format=,以及exact=False( GH 8904 )

Bug修复

  • 系列与 dtype 的连接中的错误category被强制为object. ( GH 8641 )

  • Timestamp-Timestamp 中的错误不返回 Timedelta 类型和带有时区的 datelike-datelike 操作(GH 8865

  • 使时区不匹配异常(使用 None 或不兼容时区操作的 tz)保持一致,现在将返回TypeError而不是ValueError(仅几个边缘情况),(GH 8865

  • pd.Grouper(key=...)使用没有级别/轴或仅级别的错误( GH 8795GH 8866

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

  • 包装熊猫时的错误py2app/cx_FreezeGH 8602GH 8831

  • groupby不包含 *args 或 **kwargs 的签名中的错误( GH 8733 )。

  • io.data.Options现在,RemoteDataError当 Yahoo 没有可用的到期日期以及没有从 Yahoo ( GH 8761 )、( GH 8783 ) 收到数据时,会引发此错误。

  • 传递 dtype 和名称时 csv 解析中的错误消息不明确,并且解析的数据是不同的数据类型 ( GH 8833 )

  • 使用空列表和至少一个布尔索引器对 MultiIndex 进行切片时出现错误 ( GH 8781 )

  • io.data.Options现在,当雅虎( G​​H 8761RemoteDataError )没有可用的到期日期时,就会引发此问题。

  • Timedeltakwargs 现在可能是 numpy 整数和浮点数 ( GH 8757 )。

  • 修复了算术和比较的几个突出错误TimedeltaGH 8813GH 5963GH 5436)。

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

  • slice字符串方法现在考虑步骤(GH 8754

  • BlockManager设置不同类型的值会破坏块完整性的错误( GH 8850

  • DatetimeIndex使用time对象作为键时出现错误( 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现在,RemoteDataError当 Yahoo 没有可用的到期日期以及没有从 Yahoo ( GH 8761 )、( GH 8783 ) 收到数据时,会引发此错误。

  • 修复:字体大小仅在 x 轴(垂直)或 y 轴(水平)上设置。 (GH 8765

  • 修复了在 python 3 中读取大 csv 文件时除以 0 的问题(GH 8621

  • 输出 MultiIndex 时to_html,index=False会添加额外列的错误(GH 8452

  • 从 Stata 文件导入的分类变量保留基础数据中的序数信息 ( GH 8836 )。

  • 跨对象定义.size属性NDFrame以提供与 numpy >= 1.9.1 的兼容性;越野车np.array_splitGH 8846

  • 跳过 matplotlib <= 1.2 ( GH 8648 )的直方图测试。

  • 返回对象数据类型的错误get_data_googleGH 3995

  • 当DataFrame不引用 其所有. ( GH 8844 )DataFrame.stack(..., dropna=False)columnsMultiIndexlabelslevels

  • 应用该选项上下文中的错误__enter__GH 8514

  • 重新采样中的错误会在多天重新采样时导致 ValueError 并且最后的偏移量不是从范围的开头计算的(GH 8683

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

  • 当索引包含 DST 天 ( GH 8772 )时,该错误pd.infer_freq/DataFrame.inferred_freq会阻止正确的次日频率推断。

  • use_index=False使用( GH 8558 )绘制系列时仍然使用索引名称的错误。

  • 当某些(或全部)级别名称是数字(GH 8584)时尝试堆叠多个列时会出现错误。

  • 如果索引未按词法排序或唯一,则MultiIndexwhere返回错误结果的错误( GH 7724__contains__

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

  • 回归Timestamp不解析 UTC 的“Z”区域指示符(GH 8771

  • StataWriter生成中的错误会写入 244 个字符的字符串,无论实际大小如何 ( GH 8969 )

  • 修复了当 datetime64 系列包含 NaT 时 cummin/cummax 引发的 ValueError。 ( GH 8965 )

  • 如果缺少值,DataReader 中的错误会返回对象 dtype ( GH 8980 )

  • 如果启用了 sharex 并且索引是时间序列,则绘图中的错误将在多个轴上显示标签(GH 3964)。

  • 将单位传递给 TimedeltaIndex 构造函数的错误应用了纳秒转换两次。 (GH 9011)。

  • 绘制周期数组时出现错误(GH 9012

贡献者#

共有 49 人为此版本贡献了补丁。名字带有“+”的人首次贡献了补丁。

  • 亚伦·斯台普

  • 安杰洛斯·埃夫里皮奥蒂斯 +

  • 阿特米·科尔钦斯基

  • 伯努瓦·普安泰+

  • 布莱恩·雅各布夫斯基 +

  • 查拉兰波斯·帕帕洛伊祖 +

  • 克里斯·沃斯 +

  • 大卫·斯蒂芬斯

  • 法比奥·扎尼尼 +

  • 弗朗西斯科·维亚+

  • 亨利·克莱恩汉斯 +

  • 杰克·范德普拉斯 +

  • 扬·舒尔茨

  • 杰夫·雷巴克

  • 杰夫·特拉特纳

  • 乔里斯·范登博什

  • 凯文·谢泼德

  • 马特·苏吉特 +

  • 马修·布雷特

  • 菲利普·克劳德

  • 鲁珀特·汤普森 +

  • 斯科特·E·拉斯利 +

  • 史蒂芬·霍耶

  • 斯蒂芬·西蒙斯 +

  • 西尔万·科莱 +

  • 托马斯·格兰杰 +

  • 蒂亚戈·安涛 +

  • 汤姆·奥格斯普格

  • 特伦特·豪克

  • 维克多·查维斯 +

  • 维克多·萨尔加多 +

  • 维克拉姆·班多 +

  • 王爱勇

  • 威尔·霍姆格伦 +

  • 贝赫扎德·努里

  • 布罗斯利 +

  • 查拉兰波斯·帕帕洛伊祖 +

  • 沉浸式

  • 克拉蒂

  • 杰雷巴克

  • 米吉尔伯特+

  • 个和零

  • 皮达科伊尔 +

  • 罗格

  • 塞思-p

  • 辛赫克斯

  • 乌努特布

  • 波形数据实验室+

  • 奥斯蒙德·胡尔斯塔德 +