バージョン 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
    
  • as_index=False を使用した groupby は、結果に誤った余分な列を追加しなくなります (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 または stop がインデックスに見つからない場合でも可能です (GH 7860)

    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)

    Yahooのオプションページレイアウトの変更の結果、有効期限が指定された場合、Options メソッドは単一の有効期限のデータを返すようになりました。以前は、メソッドは選択した月のすべてのデータを返していました。

    monthyear パラメータは非推奨ではなくなり、特定の月のすべてのオプションデータを取得するために使用できます。

    無効な有効期限が指定された場合、指定された日付の次の有効期限のデータが返されます。

    オプションデータフレームは、インスタンスに callsYYMMDD または putsYYMMDD として保存されるようになりました。以前は callsMMYYputsMMYY として保存されていました。次の有効期限は callsputs として保存されます。

    新機能

    • expiry パラメータは、単一の日付または日付を含むリストライクなオブジェクトを指定できるようになりました。

    • 新しいプロパティ 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 は、matplotlib の単位レジストリに datetime64 dtype を登録し、そのような値を datetime としてプロットできるようになりました。これは pandas がインポートされると有効になります。以前のバージョンでは、datetime64 値の配列をプロットすると、整数値がプロットされていました。以前の動作を維持するには、del matplotlib.units.registry[np.datetime64] を実行できます (GH 8614)。

機能強化#

  • 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 ラベルを、レベルサイズに基づいたメモリを使用する dtype で表現します。以前のバージョンでは、メモリ使用量は各レベルの要素あたり一定の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
    
  • Index プロパティ is_monotonic_increasingis_monotonic_decreasing を追加しました (GH 8680)。

  • Stata ファイルのインポート時に列を選択するオプションを追加しました (GH 7935)

  • DataFrame.info() のメモリ使用量を、下限である場合は + を追加することで修飾します (GH 8578)

  • numeric_only などの引数が処理されない特定のアグリゲーションケースでエラーを発生させます (GH 8592)。

  • io.wb.download() において、3文字のISOおよび非標準国コードのサポートを追加しました (GH 8482)

  • World Bank のデータリクエストは、errors 引数、ハードコードされた国コードのリスト、および World Bank の JSON レスポンスに基づいて警告/エラーを発生させるようになりました。以前のバージョンでは、エラーメッセージは World Bank の JSON レスポンスを見ていませんでした。問題を引き起こす入力は、リクエスト前に単純に破棄されていました。問題は、多くの良い国がハードコードされたアプローチで切り捨てられていたことでした。すべての国が機能するようになりましたが、一部のエッジケースがレスポンス全体を壊すため、一部の悪い国は例外を発生させます。(GH 8482)

  • Series.str.split() に、Series ではなく DataFrame を返すオプションを追加しました (GH 8428)

  • df.info(null_counts=None|True|False) に、デフォルトの表示オプションを上書きし、nullカウントの表示を強制するオプションを追加しました (GH 8701)

バグ修正#

  • CustomBusinessDay オブジェクトのアンピクルに関するバグ (GH 8591)

  • Categorical をレコード配列に強制する際のバグ、例えば df.to_records() (GH 8626)

  • Series.to_frame()Categorical が正しく作成されないバグ (GH 8626)

  • 渡された pd.CategoricalCategorical の astype での強制変換に関するバグ(これにより TypeError が正しく発生するようになりました)(GH 8626)

  • Seriesretbins=True を使用した場合の cut/qcut のバグ (GH 8589)

  • to_sql を使用して Categorical 列を SQL データベースに書き込む際のバグ (GH 8624)。

  • datetime の Categorical をスカラー datetime と比較したときに発生するバグ (GH 8687)

  • .iloc を使用して Categorical から選択する際のバグ (GH 8623)

  • Categorical を使用した groupby-transform のバグ (GH 8623)

  • Categorical を使用した duplicated/drop_duplicates のバグ (GH 8623)

  • 最初の引数が numpy 配列スカラー(例:np.int64)であった場合に Categorical の逆比較演算子がエラーを発生させるバグ (GH 8658)

  • リストライクなオブジェクトによるパネルインデックス処理のバグ (GH 8710)

  • options.mode.use_inf_as_null が True の場合の DataFrame.dtypes の互換性問題 (GH 8722)

  • read_csv のバグ、dialect パラメータが文字列を受け付けなかった (GH 8703)

  • 空のリストで MultiIndex レベルをスライスする際のバグ (GH 8737)

  • numpy 配列を含む Float/Index Index との加算/減算における数値インデックス操作のバグ (GH 8608)

  • 空のインデクサと望ましくない dtype の強制変換による setitem のバグ (GH 8669)

  • setitem での ix/loc ブロック分割のバグ (整数型のような dtype、例: datetime64 で発生) (GH 8607)

  • ユニークではないが単調なインデックスに対して、インデックスに存在しない整数値でラベルベースのインデックス付けを行った場合のバグ (GH 8680)。

  • numpy 1.7 で np.nan を使用して Float64Index をインデックス付けした場合のバグ (GH 8980)。

  • MultiIndexshape 属性を修正 (GH 8609)

  • GroupBy のバグで、グルーパーと列との名前の競合が groupby 操作を壊していた (GH 7115, GH 8112)

  • y をプロットし、ラベルを指定すると元の DataFrame のインデックス名が変更されるバグを修正しました (GH 8494)

  • Matplotlib で DatetimeIndex を直接プロットする際の回帰バグを修正 (GH 8614)。

  • date_range のバグで、部分的に指定された日付に現在の日付が組み込まれていた (GH 6961)

  • 混在する dtype の Panel4d で、インデクサによってスカラー値を設定する際に失敗するバグ (GH 8702)

  • DataReader が、渡されたシンボルのいずれかが無効だった場合に失敗するバグ。現在では有効なシンボルにはデータを返し、無効なシンボルには np.nan を返します (GH 8494)

  • 非浮動小数点数の戻り値が許可されなかった get_quote_yahoo のバグ (GH 5229)。

貢献者#

このリリースには合計23人がパッチを貢献しました。名前の横に「+」がある人は、初めてパッチを貢献しました。

  • Aaron Staple +

  • アンドリュー・ローゼンフェルド

  • Anton I. Sipos

  • アルテム・コルチンスキー

  • Bill Letson +

  • Dave Hughes +

  • David Stephens

  • Guillaume Horel +

  • ジェフ・リーバック

  • Joris Van den Bossche

  • ケビン・シェパード

  • Nick Stahl +

  • Sanghee Kim +

  • ステファン・ホイヤー

  • Tom Augspurger

  • TomAugspurger

  • WANG Aiyong +

  • behzad nouri

  • immerrr

  • jnmclarty

  • jreback

  • pallav-fdsi +

  • unutbu