版本 0.15.1(2014 年 11 月 9 日)#

这是 0.15.0 的一个小错误修复版本,包括少量 API 更改、一些新功能、增强功能和性能改进以及大量错误修复。我们建议所有用户升级到此版本。

API 更改#

  • s.dt.hour其他.dt访问器现在将返回np.nan缺失值(而不是以前的 -1),(GH 8689

    In [1]: s = pd.Series(pd.date_range("20130101", periods=5, freq="D"))
    
    In [2]: s.iloc[2] = np.nan
    
    In [3]: s
    Out[3]: 
    0   2013-01-01
    1   2013-01-02
    2          NaT
    3   2013-01-04
    4   2013-01-05
    Length: 5, dtype: datetime64[ns]
    

    以前的行为:

    In [6]: s.dt.hour
    Out[6]:
    0    0
    1    0
    2   -1
    3    0
    4    0
    dtype: int64
    

    当前行为:

    In [4]: s.dt.hour
    Out[4]: 
    0    0.0
    1    0.0
    2    NaN
    3    0.0
    4    0.0
    Length: 5, dtype: float64
    
  • groupbywithas_index=False不会向结果添加错误的额外列(GH 8582):

    In [5]: np.random.seed(2718281)
    
    In [6]: df = pd.DataFrame(np.random.randint(0, 100, (10, 2)), columns=["jim", "joe"])
    
    In [7]: df.head()
    Out[7]: 
       jim  joe
    0   61   81
    1   96   49
    2   55   65
    3   72   51
    4   77   12
    
    [5 rows x 2 columns]
    
    In [8]: ts = pd.Series(5 * np.random.randint(0, 3, 10))
    

    以前的行为:

    In [4]: df.groupby(ts, as_index=False).max()
    Out[4]:
       NaN  jim  joe
    0    0   72   83
    1    5   77   84
    2   10   96   65
    

    当前行为:

    In [4]: df.groupby(ts, as_index=False).max()
    Out[4]:
       jim  joe
    0   72   83
    1   77   84
    2   96   65
    
  • groupby如果列名称与石斑鱼名称(GH 8112)冲突,则不会错误地排除列:

    In [9]: df = pd.DataFrame({"jim": range(5), "joe": range(5, 10)})
    
    In [10]: df
    Out[10]: 
       jim  joe
    0    0    5
    1    1    6
    2    2    7
    3    3    8
    4    4    9
    
    [5 rows x 2 columns]
    
    In [11]: gr = df.groupby(df["jim"] < 2)
    

    以前的行为(不包括输出中的第一列):

    In [4]: gr.apply(sum)
    Out[4]:
           joe
    jim
    False   24
    True    11
    

    当前行为:

    In [12]: gr.apply(sum)
    Out[12]: 
           jim  joe
    jim            
    False    9   24
    True     1   11
    
    [2 rows x 2 columns]
    
  • 支持使用单调递减索引进行切片,即使在索引中未找到start或( GH 7860 ):stop

    In [13]: s = pd.Series(["a", "b", "c", "d"], [4, 3, 2, 1])
    
    In [14]: s
    Out[14]: 
    4    a
    3    b
    2    c
    1    d
    Length: 4, dtype: object
    

    以前的行为:

    In [8]: s.loc[3.5:1.5]
    KeyError: 3.5
    

    当前行为:

    In [15]: s.loc[3.5:1.5]
    Out[15]: 
    3    b
    2    c
    Length: 2, dtype: object
    
  • io.data.Options已修复 Yahoo 选项页面格式的更改 ( GH 8612 )、( GH 8741 )

    笔记

    由于雅虎选项页面布局的变化,当给出到期日期时, Options方法现在返回单个到期日期的数据。以前,方法返回所选月份的所有数据。

    month和参数year已被弃用,可用于获取给定月份的所有期权数据。

    如果给出的到期日期无效,则返回给定日期之后的下一个到期日期的数据。

    选项数据帧现在在实例上保存为callsYYMMDDputsYYMMDD。以前它们被保存为callsMMYYputsMMYY。下一个到期时间保存为callsputs

    新功能:

    • 到期参数现在可以是单个日期或包含日期的类似列表的对象。

    • expiry_dates添加了一个新属性,该属性返回所有可用的到期日期。

    当前行为:

    In [17]: from pandas.io.data import Options
    
    In [18]: aapl = Options('aapl', 'yahoo')
    
    In [19]: aapl.get_call_data().iloc[0:5, 0:1]
    Out[19]:
                                                 Last
    Strike Expiry     Type Symbol
    80     2014-11-14 call AAPL141114C00080000  29.05
    84     2014-11-14 call AAPL141114C00084000  24.80
    85     2014-11-14 call AAPL141114C00085000  24.05
    86     2014-11-14 call AAPL141114C00086000  22.76
    87     2014-11-14 call AAPL141114C00087000  21.74
    
    In [20]: aapl.expiry_dates
    Out[20]:
    [datetime.date(2014, 11, 14),
     datetime.date(2014, 11, 22),
     datetime.date(2014, 11, 28),
     datetime.date(2014, 12, 5),
     datetime.date(2014, 12, 12),
     datetime.date(2014, 12, 20),
     datetime.date(2015, 1, 17),
     datetime.date(2015, 2, 20),
     datetime.date(2015, 4, 17),
     datetime.date(2015, 7, 17),
     datetime.date(2016, 1, 15),
     datetime.date(2017, 1, 20)]
    
    In [21]: aapl.get_near_stock_price(expiry=aapl.expiry_dates[0:3]).iloc[0:5, 0:1]
    Out[21]:
                                                Last
    Strike Expiry     Type Symbol
    109    2014-11-22 call AAPL141122C00109000  1.48
           2014-11-28 call AAPL141128C00109000  1.79
    110    2014-11-14 call AAPL141114C00110000  0.55
           2014-11-22 call AAPL141122C00110000  1.02
           2014-11-28 call AAPL141128C00110000  1.32
    
  • pandas 现在还在datetime64matplotlib 的单位注册表中注册 dtype 以绘制日期时间等值。一旦 pandas 被导入,这个功能就会被激活。在以前的版本中,绘制值数组datetime64将导致绘制整数值。要保持以前的行为,你可以这样做 (GH 8614)。del matplotlib.units.registry[np.datetime64]

增强功能#

  • concat允许将 pandas 对象的更广泛的可迭代对象作为第一个参数传递(GH 8645):

    In [16]: from collections import deque
    
    In [17]: df1 = pd.DataFrame([1, 2, 3])
    
    In [18]: df2 = pd.DataFrame([4, 5, 6])
    

    以前的行为:

    In [7]: pd.concat(deque((df1, df2)))
    TypeError: first argument must be a list-like of pandas objects, you passed an object of type "deque"
    

    当前行为:

    In [19]: pd.concat(deque((df1, df2)))
    Out[19]: 
       0
    0  1
    1  2
    2  3
    0  4
    1  5
    2  6
    
    [6 rows x 1 columns]
    
  • MultiIndex使用基于级别大小利用内存的数据类型表示标签。在之前的版本中,每个级别中每个元素的内存使用量恒定为 8 字节。此外,在之前的版本中,报告的内存使用情况不正确,因为它没有显示底层数据数组占用的内存使用情况。 ( GH 8456 )

    In [20]: dfi = pd.DataFrame(
       ....:     1, index=pd.MultiIndex.from_product([["a"], range(1000)]), columns=["A"]
       ....: )
       ....: 
    

    以前的行为:

    # this was underreported in prior versions
    In [1]: dfi.memory_usage(index=True)
    Out[1]:
    Index    8000 # took about 24008 bytes in < 0.15.1
    A        8000
    dtype: int64
    

    当前行为:

    In [21]: dfi.memory_usage(index=True)
    Out[21]: 
    Index    44212
    A         8000
    Length: 2, dtype: int64
    
  • 添加了索引属性is_monotonic_increasingis_monotonic_decreasing( GH 8680 )。

  • 添加了导入 Stata 文件时选择列的选项(GH 7935

  • DataFrame.info()通过添加+是否为下限 ( GH 8578 )来限定内存使用量

  • numeric_only在某些聚合情况下,如果未处理诸如此类的参数,则会引发错误( GH 8592)。

  • io.wb.download()在( GH 8482 )中添加了对 3 字符 ISO 和非标准国家/地区代码的支持

  • 世界银行数据请求现在将根据参数errors以及硬编码国家/地区代码列表和世界银行的 JSON 响应发出警告/提出。在之前的版本中,错误消息不会查看世界银行的 JSON 响应。引起问题的输入在请求之前就被简单地删除了。问题是许多好的国家都被硬编码方法所淘汰。现在所有国家都将发挥作用,但一些表现不佳的国家会提出例外,因为一些边缘情况会破坏整个应对措施。 ( GH 8482 )

  • Series.str.split()添加了返回 aDataFrame而不是 a 的选项SeriesGH 8428

  • 添加了df.info(null_counts=None|True|False)覆盖默认显示选项并强制显示空计数的选项(GH 8701

Bug修复

  • 对象unpickle 中的错误CustomBusinessDay( GH 8591 )

  • Categorical强制记录数组时出现错误,例如df.to_records()GH 8626

  • 错误未Categorical正确创建Series.to_frame()GH 8626

  • Categorical传递的a 的 astype 中进行强制转换时出现错误pd.Categorical(现在可以TypeError正确引发),( GH 8626 )

  • 使用andcut时出现错误(GH 8589qcutSeriesretbins=True

  • to_sql使用( GH 8624 )将分类列写入 SQL 数据库时出现错误。

  • Categorical与标量日期时间比较时,比较日期时间引发的错误( GH 8687

  • Categorical从with中选择时出现错误.ilocGH 8623

  • 带有分类的 groupby 变换中的错误(GH 8623

  • 带有分类的重复/drop_duplicates 中的错误(GH 8623

  • Categorical如果第一个参数是 numpy 数组标量(例如 np.int64)(GH 8658),则反射比较运算符引发错误

  • 使用类似列表的面板索引中的错误(GH 8710

  • 兼容性问题是DataFrame.dtypes何时options.mode.use_inf_as_null为 True ( GH 8722 )

  • 错误中read_csvdialect参数不会采用字符串(GH 8703

  • 使用空列表切片 MultiIndex 级别时出现错误 ( GH 8737 )

  • 使用 numpy 数组的 Float/Index Index 进行 add/sub 的数字索引操作中的错误 ( GH 8608 )

  • setitem 中存在空索引器和不必要的 dtypes 强制转换的错误 ( GH 8669 )

  • setitem 上的 ix/loc 块分割中的错误(具有类似整数的 dtypes 的清单,例如 datetime64)(GH 8607

  • 使用在非唯一但单调索引的索引中找不到的整数进行基于标签的索引时出现错误(GH 8680)。

  • np.nan在numpy 1.7 ( GH 8980 )上索引 Float64Index 时出现错误。

  • 修复( GH 8609 )shape的属性MultiIndex

  • GroupBy石斑鱼和列之间的名称冲突会破坏操作的错误groupbyGH 7115GH 8112

  • y修复了绘制列并指定标签会改变原始 DataFrame 的索引名称的错误( GH 8494 )

  • 修复直接使用 matplotlib ( GH 8614 )绘制 DatetimeIndex 时的回归问题。

  • date_range部分指定日期包含当前日期的错误( GH 6961

  • 由索引器设置为具有混合数据类型的标量值的错误Panel4d失败(GH 8702

  • DataReader如果传递的符号之一无效,则错误 where 's 将失败。现在返回有效符号的数据和无效符号的 np.nan ( GH 8494 )

  • 错误在于get_quote_yahoo不允许非浮点返回值(GH 5229)。

贡献者#

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

  • 亚伦·斯台普+

  • 安德鲁·罗森菲尔德

  • 安东·西波斯

  • 阿特米·科尔钦斯基

  • 比尔·莱森+

  • 戴夫·休斯 +

  • 大卫·斯蒂芬斯

  • 纪尧姆·霍雷尔 +

  • 杰夫·雷巴克

  • 乔里斯·范登博什

  • 凯文·谢泼德

  • 尼克·斯塔尔 +

  • 金尚熙 +

  • 史蒂芬·霍耶

  • 汤姆·奥格斯普格

  • 汤姆·奥格斯普格

  • 王爱勇+

  • 贝赫扎德·努里

  • 沉浸式

  • 克拉蒂

  • 杰雷巴克

  • 帕拉夫-FDSI +

  • 乌努特布