バージョン 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]
categorydtype を持つ Series のユニーク値に関するバグで、カテゴリが「使用されている」かどうかにかかわらずすべてのカテゴリが返されていました(議論については 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がlevelおよびskipnaパラメータをサポートするようになりました。Series.all,Series.any,Index.all, およびIndex.anyは、ndarray との互換性のために存在していたoutおよびkeepdimsパラメータをサポートしなくなりました。様々なインデックス型はallおよびany集約関数をサポートしなくなり、TypeErrorを発生させるようになりました。( GH 8302 )。カテゴリカル dtype とオブジェクト dtype を持つ 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')は、UTC ではなくローカル時間を返すという点でTimestamp.now()と同等になりました。また、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 データファイルにエクスポートされるカテゴリ変数の制限については、こちらを参照してください。
StataReaderおよびread_stataに、インポートされたカテゴリデータを順序付けするかどうかを選択するフラグorder_categoricalsを追加しました (GH 8836)。Stata データファイルからカテゴリ変数をインポートする方法の詳細については、こちらを参照してください。Categorical データを HDF5 にエクスポート/インポートする機能が追加されました (GH 7621)。クエリはオブジェクト配列の場合と同じように機能します。ただし、
categorydtyped データはより効率的な方法で保存されます。例と以前のバージョンの pandas に関する注意点については、こちらを参照してください。Categoricalクラスでのsearchsorted()のサポートが追加されました (GH 8420)。
その他の拡張機能
DataFrameをデータベースに書き込む際に、列のSQL型を指定する機能が追加されました (GH 8778)。たとえば、文字列列にデフォルトの
Text型ではなく sqlalchemy のString型を使用するように指定するなど。from sqlalchemy.types import String data.to_sql('data_dtype', engine, dtype={'Col_1': String}) # noqa F821
Series.allおよびSeries.anyがlevelおよびskipnaパラメータをサポートするようになりました (GH 8302)>>> s = pd.Series([False, True, False], index=[0, 0, 1]) >>> s.any(level=0) 0 True 1 False dtype: bool
Panelがallおよびany集約関数をサポートするようになりました。( 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が適切な dtype を持つnumpy.ndarrayオブジェクトとの算術演算をサポートするようになりました (numpy 1.8 以降のみ) (GH 8884)。公開 API に
Timedelta.to_timedelta64()メソッドを追加しました (GH 8884)。gbq モジュールに
gbq.generate_bq_schema()関数を追加しました (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_sqlが、NA 値を含み dtype がobjectの列について、非NA値のデータ型を推論するようになりました (GH 8778)。
パフォーマンス#
バグ修正#
categorydtype を持つ Series の連結で、objectに強制変換されていたバグを修正しました。( GH 8641 )Timestamp-TimestampがTimedelta型を返さないバグと、タイムゾーンを持つdatelike-datelike演算のバグ (GH 8865)
タイムゾーンの不一致例外 (None と演算された tz または互換性のないタイムゾーン) を一貫させ、
ValueErrorではなくTypeErrorを返すようになりました (いくつかのエッジケースのみ) (GH 8865)レベル/軸なし、またはレベルのみの
pd.Grouper(key=...)を使用する際のバグ (GH 8795, GH 8866)groupbyに無効な/引数なしのパラメータが渡された場合に
TypeErrorを報告するようになりました (GH 8015)*args または **kwargs を含まない
groupbyシグネチャのバグ (GH 8733)。io.data.Optionsは、Yahoo から有効期限が取得できない場合や、Yahoo からデータを受信しない場合にRemoteDataErrorを発生させるようになりました (GH 8761), (GH 8783)。CSV解析でdtypeとnamesを渡し、解析されたデータが異なるデータ型である場合に不明瞭なエラーメッセージ (GH 8833)
空のリストと少なくとも1つのブールインデクサでMultiIndexをスライスする際のバグ (GH 8781)
io.data.Optionsは、Yahoo から有効期限が取得できない場合にRemoteDataErrorを発生させるようになりました (GH 8761)。Timedeltaのキーワード引数として 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で、レベルでの再インデックスがラベルを再順序付けしないバグ (GH 4088)dateutilタイムゾーンでの特定の操作におけるバグ。dateutil 2.3で顕現していました (GH 8639)
固定/ローカルオフセットタイムゾーンでのDatetimeIndexイテレーションにおけるリグレッション (GH 8890)
to_datetimeで%fフォーマットを使用してナノ秒をパースする際のバグ (GH 8989)io.data.Optionsは、Yahoo から有効期限が取得できない場合や、Yahoo からデータを受信しない場合に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がオブジェクトの dtype を返していたバグ (GH 3995)DataFrameの
columnsがMultiIndexであり、そのlabelsがすべてのlevelsを参照していない場合に、DataFrame.stack(..., dropna=False)が失敗するバグ (GH 8844)__enter__に適用された Option コンテキストのバグ (GH 8514)複数日にわたるリサンプリングで、最後のオフセットが範囲の開始から計算されない場合にValueErrorを引き起こすresampleのバグ (GH 8683)
DataFrame.plot(kind='scatter')が np.array が DataFrame に存在するかどうかをチェックする際に失敗するバグ (GH 8852)インデックスに夏時間の日が含まれている場合に、日中の周波数推論が適切に行われない
pd.infer_freq/DataFrame.inferred_freqのバグを修正しました (GH 8772)。use_index=Falseを使用してシリーズをプロットする際に、インデックス名がまだ使用されていたバグ (GH 8558)。複数の列をスタックする際に、レベル名の一部 (またはすべて) が数字である場合のバグ (GH 8584)。
MultiIndexで、インデックスが辞書順にソートされていない、またはユニークでない場合に__contains__が誤った結果を返すバグ (GH 7724)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が欠損値がある場合にオブジェクトdtypeを返すバグ (GH 8980)
sharexが有効でインデックスが時系列の場合、プロットで複数の軸にラベルが表示されるバグ (GH 3964)。
TimedeltaIndexコンストラクタにユニットを渡すと、ナノ秒変換が2回適用されるバグ (GH 9011)。
期間のような配列をプロットする際のバグ (GH 9012)
貢献者#
本リリースには合計49名がパッチを貢献しました。「+」が付いている方は、今回初めてパッチを貢献されました。
Aaron Staple
Angelos Evripiotis +
アルテム・コルチンスキー
Benoit Pointet +
Brian Jacobowski +
Charalampos Papaloizou +
Chris Warth +
David Stephens
Fabio Zanini +
Francesc Via +
Henry Kleynhans +
Jake VanderPlas +
ヤン・シュルツ
ジェフ・リーバック
Jeff Tratner
Joris Van den Bossche
ケビン・シェパード
Matt Suggit +
Matthew Brett
Phillip Cloud
Rupert Thompson +
Scott E Lasley +
ステファン・ホイヤー
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 +
ワンズアンドゼロズ
peadarcoyle +
ロックg
seth-p
sinhrks
unutbu
wavedatalab +
Åsmund Hjulstad +