バージョン 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メソッドは単一の有効期限のデータを返すようになりました。以前は、メソッドは選択した月のすべてのデータを返していました。monthとyearパラメータは非推奨ではなくなり、特定の月のすべてのオプションデータを取得するために使用できます。無効な有効期限が指定された場合、指定された日付の次の有効期限のデータが返されます。
オプションデータフレームは、インスタンスに
callsYYMMDDまたはputsYYMMDDとして保存されるようになりました。以前はcallsMMYYとputsMMYYとして保存されていました。次の有効期限はcallsとputsとして保存されます。新機能
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 の単位レジストリに
datetime64dtype を登録し、そのような値を 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_increasingとis_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.CategoricalのCategoricalの astype での強制変換に関するバグ(これによりTypeErrorが正しく発生するようになりました)(GH 8626)Seriesとretbins=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)。MultiIndexのshape属性を修正 (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