バージョン 0.13.0 (2014年1月3日)#

これは0.12.0からのメジャーリリースで、多数のAPI変更、いくつかの新機能と機能強化、そして多数のバグ修正が含まれています。

主な機能は以下の通りです。

  • 新しいインデックスタイプFloat64Indexのサポート、およびその他のインデックス強化

  • HDFStoreはクエリ指定のための新しい文字列ベースの構文を持つ

  • 新しい補間メソッドのサポート

  • timedelta操作の更新

  • 新しい文字列操作メソッドextract

  • オフセットのナノ秒サポート

  • DataFramesのisin

いくつかの実験的な機能が追加されました。これには以下が含まれます。

  • 式評価のための新しいeval/queryメソッド

  • msgpackシリアライゼーションのサポート

  • GoogleのBigQueryへのI/Oインターフェース

いくつかの新しいまたは更新されたドキュメントセクションがあります。これには以下が含まれます。

  • SQLとの比較は、SQLに慣れているがまだpandasを学んでいる人々に役立つはずです。

  • Rとの比較は、Rからpandasへのイディオム翻訳です。

  • パフォーマンスの向上は、eval/queryでpandasのパフォーマンスを向上させる方法です。

警告

0.13.0では、Seriesは内部的にリファクタリングされ、ndarrayのサブクラスではなく、pandasの他のコンテナと同様にNDFrameのサブクラスになりました。これは、非常に限られたAPIへの影響しかない透過的な変更であるはずです。内部のリファクタリングを参照してください

APIの変更点#

  • read_excelは、sheetname引数に読み込むシートのインデックスを与える整数をサポートするようになりました(GH 4301)。

  • テキストパーサーは、"inf"、"Inf"、"-Inf"、"iNf"など、infのように読めるものをすべて無限大として扱うようになりました(GH 4220GH 4219)。これはread_tableread_csvなどに影響します。

  • @jtratnerのおかげで、pandasは2to3の必要なくPython 2/3互換になりました。その結果、pandasはイテレータをより広範囲に使用するようになりました。これにより、Benjamin Petersonのsixライブラリの大部分がcompatに導入されました(GH 4384GH 4375GH 4372)。

  • pandas.util.compatpandas.util.py3compatpandas.compatに統合されました。pandas.compatには、2/3互換性を可能にする多くの関数が含まれています。range、filter、map、zipのリスト版とイテレータ版、およびPython 3互換性に必要なその他の要素が含まれています。lmaplziplrangelfilterはすべて、numpy、添字、およびpandasコンストラクタとの互換性のために、イテレータではなくリストを生成します(GH 4384GH 4375GH 4372)。

  • 負のインデクサを持つSeries.getは、[]と同じ値を返すようになりました(GH 4390)。

  • IndexおよびMultiIndexがメタデータ(levelslabelsnames)を処理する方法の変更(GH 4039

    # previously, you would have set levels or labels directly
    >>> pd.index.levels = [[1, 2, 3, 4], [1, 2, 4, 4]]
    
    # now, you use the set_levels or set_labels methods
    >>> index = pd.index.set_levels([[1, 2, 3, 4], [1, 2, 4, 4]])
    
    # similarly, for names, you can rename the object
    # but setting names is not deprecated
    >>> index = pd.index.set_names(["bob", "cranberry"])
    
    # and all methods take an inplace kwarg - but return None
    >>> pd.index.set_names(["bob", "cranberry"], inplace=True)
    
  • 今後、NDFrameオブジェクトを使ったすべての除算は、将来のインポートに関係なく真の除算になります。これは、pandasオブジェクトに対する操作がデフォルトで浮動小数点除算を使用し、浮動小数点dtypeを返すことを意味します。整数除算を行うには//floordivを使用できます。

    整数除算

    In [3]: arr = np.array([1, 2, 3, 4])
    
    In [4]: arr2 = np.array([5, 3, 2, 1])
    
    In [5]: arr / arr2
    Out[5]: array([0, 0, 1, 4])
    
    In [6]: pd.Series(arr) // pd.Series(arr2)
    Out[6]:
    0    0
    1    0
    2    1
    3    4
    dtype: int64
    

    真の除算

    In [7]: pd.Series(arr) / pd.Series(arr2)  # no future import required
    Out[7]:
    0    0.200000
    1    0.666667
    2    1.500000
    3    4.000000
    dtype: float64
    
  • fillna/ffill/bfilldowncast='infer'が渡された場合、dtypeを推論しダウンキャストします(GH 4604)。

  • すべてのNDFrameオブジェクトの__nonzero__は、ValueErrorを発生させるようになりました。これは(GH 1073GH 4633)の動作に戻ります。より詳細な説明についてはgotchasを参照してください。

    これにより、本質的に曖昧な、全体のpandasオブジェクトに対するブール比較が防止されます。これらはすべてValueErrorを発生させます。

    >>> df = pd.DataFrame({'A': np.random.randn(10),
    ...                    'B': np.random.randn(10),
    ...                    'C': pd.date_range('20130101', periods=10)
    ...                    })
    ...
    >>> if df:
    ...     pass
    ...
    Traceback (most recent call last):
        ...
    ValueError: The truth value of a DataFrame is ambiguous.  Use a.empty,
    a.bool(), a.item(), a.any() or a.all().
    
    >>> df1 = df
    >>> df2 = df
    >>> df1 and df2
    Traceback (most recent call last):
        ...
    ValueError: The truth value of a DataFrame is ambiguous.  Use a.empty,
    a.bool(), a.item(), a.any() or a.all().
    
    >>> d = [1, 2, 3]
    >>> s1 = pd.Series(d)
    >>> s2 = pd.Series(d)
    >>> s1 and s2
    Traceback (most recent call last):
        ...
    ValueError: The truth value of a DataFrame is ambiguous.  Use a.empty,
    a.bool(), a.item(), a.any() or a.all().
    

    単一要素のブールSeriesの評価を容易にするため、NDFrameオブジェクトに.bool()メソッドを追加しました。

    >>> pd.Series([True]).bool()
     True
    >>> pd.Series([False]).bool()
     False
    >>> pd.DataFrame([[True]]).bool()
     True
    >>> pd.DataFrame([[False]]).bool()
     False
    
  • Index以外のすべてのNDFrame (SeriesDataFramePanelPanel4DSparsePanelなど) は、すべての算術演算子と算術フレキシブルメソッド (add、sub、mulなど) をサポートするようになりました。SparsePanelは、非スカラーでのpowまたはmodをサポートしていません。( GH 3765)

  • SeriesDataFrameは、軸/Seriesごとの統計的モードを計算するmode()メソッドを持つようになりました(GH 5367)。

  • 連鎖代入は、ユーザーがコピーに代入している場合に、デフォルトで警告を発するようになりました。これはオプションmode.chained_assignmentで変更できます。許容されるオプションはraise/warn/Noneです。ドキュメントを参照してください。

    In [1]: dfc = pd.DataFrame({'A': ['aaa', 'bbb', 'ccc'], 'B': [1, 2, 3]})
    
    In [2]: pd.set_option('chained_assignment', 'warn')
    

    これを試みると、以下の警告/例外が表示されます。

    In [3]: dfc.loc[0]['A'] = 1111
    
    Traceback (most recent call last)
       ...
    SettingWithCopyWarning:
       A value is trying to be set on a copy of a slice from a DataFrame.
       Try using .loc[row_index,col_indexer] = value instead
    

    これが正しい代入方法です。

    In [4]: dfc.loc[0, 'A'] = 11
    
    In [5]: dfc
    Out[5]: 
         A  B
    0   11  1
    1  bbb  2
    2  ccc  3
    
  • Panel.reindexは、他のNDFrameオブジェクトに準拠するため、Panel.reindex(items=None, major_axis=None, minor_axis=None, **kwargs)という呼び出しシグネチャを持っています。内部リファクタリングで詳細を確認してください。

    他のNDFrameオブジェクトに準拠するため、Panel.reindexの呼び出しシグネチャはPanel.reindex(items=None, major_axis=None, minor_axis=None, **kwargs)です。内部リファクタリングを参照してください。

  • Series.argminSeries.argmaxは、Series.idxminSeries.idxmaxのエイリアスになりました。これらは、

    それぞれ最小または最大要素のインデックスを返します。0.13.0以前は、これらは最小/最大要素の位置を返していました(GH 6214)。

以前のバージョンの非推奨/変更#

これらは0.12以前に発表された変更で、0.13.0から有効になっています。

  • 非推奨のFactorを削除(GH 3650

  • 非推奨のset_printoptions/reset_printoptionsを削除(GH 3046

  • 非推奨の_verbose_infoを削除(GH 3215

  • pandas.io.parsersから非推奨のread_clipboard/to_clipboard/ExcelFile/ExcelWriterを削除しました(GH 3717)。これらはメインのpandas名前空間で関数として利用可能です(例:pd.read_clipboard)。

  • tupleize_colsのデフォルトは、to_csvread_csvの両方でFalseになりました。0.12での公正な警告です(GH 3604)。

  • display.max_seq_lenのデフォルト値がNoneから100に変更されました。これにより、様々な場所での長いシーケンスの切り詰め表示("...")が有効になります。(GH 3391

非推奨#

0.13.0で非推奨

  • 非推奨のiterkvは将来のリリースで削除されます(これは2to3の変更を回避するために使用されたiteritemsのエイリアスでした)。(GH 4384, GH 4375, GH 4372)

  • 文字列メソッドmatchは非推奨になりました。その役割は現在、extractによってより慣用的に実行されます。将来のリリースでは、matchのデフォルトの動作が変更され、ブールインデクサを返すcontainsに類似するようになります。(それらの違いは厳密性です。matchre.matchに依存し、containsre.searchに依存します。)このリリースでは、非推奨の動作がデフォルトですが、キーワード引数as_indexer=Trueを通じて新しい動作が利用可能です。

インデックスAPIの変更#

0.13以前は、特定の軸のインデックスに含まれていない値を設定するためにラベルインデクサ(.loc/.ix)を使用することは不可能でした(GH 2578)。ドキュメントを参照してください。

Seriesの場合、これは実質的に追加操作です。

In [6]: s = pd.Series([1, 2, 3])

In [7]: s
Out[7]: 
0    1
1    2
2    3
dtype: int64

In [8]: s[5] = 5.

In [9]: s
Out[9]: 
0    1.0
1    2.0
2    3.0
5    5.0
dtype: float64
In [10]: dfi = pd.DataFrame(np.arange(6).reshape(3, 2),
   ....:                    columns=['A', 'B'])
   ....: 

In [11]: dfi
Out[11]: 
   A  B
0  0  1
1  2  3
2  4  5

これは以前はKeyErrorを発生させていました。

In [12]: dfi.loc[:, 'C'] = dfi.loc[:, 'A']

In [13]: dfi
Out[13]: 
   A  B  C
0  0  1  0
1  2  3  2
2  4  5  4

これはappend操作のようなものです。

In [14]: dfi.loc[3] = 5

In [15]: dfi
Out[15]: 
   A  B  C
0  0  1  0
1  2  3  2
2  4  5  4
3  5  5  5

任意の軸でのパネル設定操作は、入力をパネルに合わせます。

In [20]: p = pd.Panel(np.arange(16).reshape(2, 4, 2),
   ....:              items=['Item1', 'Item2'],
   ....:              major_axis=pd.date_range('2001/1/12', periods=4),
   ....:              minor_axis=['A', 'B'], dtype='float64')
   ....:

In [21]: p
Out[21]:
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 2 (minor_axis)
Items axis: Item1 to Item2
Major_axis axis: 2001-01-12 00:00:00 to 2001-01-15 00:00:00
Minor_axis axis: A to B

In [22]: p.loc[:, :, 'C'] = pd.Series([30, 32], index=p.items)

In [23]: p
Out[23]:
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 3 (minor_axis)
Items axis: Item1 to Item2
Major_axis axis: 2001-01-12 00:00:00 to 2001-01-15 00:00:00
Minor_axis axis: A to C

In [24]: p.loc[:, :, 'C']
Out[24]:
            Item1  Item2
2001-01-12   30.0   32.0
2001-01-13   30.0   32.0
2001-01-14   30.0   32.0
2001-01-15   30.0   32.0

Float64Index APIの変更#

  • 新しいインデックスタイプFloat64Indexが追加されました。これは、インデックス作成時に浮動小数点値を渡すと自動的に作成されます。これにより、純粋なラベルベースのスライシングパラダイムが可能になり、スカラーインデックス作成とスライシングで[], ix, locがまったく同じように機能するようになります(GH 263)。

    構築は浮動小数点型の値に対してデフォルトで行われます。

    In [16]: index = pd.Index([1.5, 2, 3, 4.5, 5])
    
    In [17]: index
    Out[17]: Index([1.5, 2.0, 3.0, 4.5, 5.0], dtype='float64')
    
    In [18]: s = pd.Series(range(5), index=index)
    
    In [19]: s
    Out[19]: 
    1.5    0
    2.0    1
    3.0    2
    4.5    3
    5.0    4
    dtype: int64
    

    [],.ix,.locのスカラ選択は常にラベルベースになります。整数は等しい浮動小数点インデックスと一致します(例:33.0と同等です)。

    In [20]: s[3]
    Out[20]: 2
    
    In [21]: s.loc[3]
    Out[21]: 2
    

    唯一の位置によるインデックス指定はilocを介して行われます。

    In [22]: s.iloc[3]
    Out[22]: 3
    

    見つからないスカラーインデックスはKeyErrorを発生させます。

    スライシングは、[],ix,locの場合は常にインデックスの値に対して行われ、ilocの場合は常に位置に基づいて行われます。

    In [23]: s[2:4]
    Out[23]: 
    2.0    1
    3.0    2
    dtype: int64
    
    In [24]: s.loc[2:4]
    Out[24]: 
    2.0    1
    3.0    2
    dtype: int64
    
    In [25]: s.iloc[2:4]
    Out[25]: 
    3.0    2
    4.5    3
    dtype: int64
    

    浮動小数点インデックスでは、浮動小数点数を使用したスライシングが許可されます。

    In [26]: s[2.1:4.6]
    Out[26]: 
    3.0    2
    4.5    3
    dtype: int64
    
    In [27]: s.loc[2.1:4.6]
    Out[27]: 
    3.0    2
    4.5    3
    dtype: int64
    
  • 他のインデックスタイプでのインデックス指定は([],ixのフォールバック位置指定とともに)保持されますが、Float64Index以外のインデックスでの浮動小数点スライシングはTypeErrorを発生させるようになりました。

    In [1]: pd.Series(range(5))[3.5]
    TypeError: the label [3.5] is not a proper indexer for this index type (Int64Index)
    
    In [1]: pd.Series(range(5))[3.5:4.5]
    TypeError: the slice start [3.5] is not a proper indexer for this index type (Int64Index)
    

    スカラー浮動小数点インデクサの使用は将来のバージョンで非推奨になりますが、今のところは許可されています。

    In [3]: pd.Series(range(5))[3.0]
    Out[3]: 3
    

HDFStore APIの変更点#

  • クエリ形式の変更。より文字列に近いクエリ形式がサポートされるようになりました。ドキュメントを参照してください。

    In [28]: path = 'test.h5'
    
    In [29]: dfq = pd.DataFrame(np.random.randn(10, 4),
       ....:                    columns=list('ABCD'),
       ....:                    index=pd.date_range('20130101', periods=10))
       ....: 
    
    In [30]: dfq.to_hdf(path, key='dfq', format='table', data_columns=True)
    

    インライン関数評価を使用してブール式を使用します。

    In [31]: pd.read_hdf(path, 'dfq',
       ....:             where="index>Timestamp('20130104') & columns=['A', 'B']")
       ....: 
    Out[31]: 
                       A         B
    2013-01-05 -0.424972  0.567020
    2013-01-06 -0.673690  0.113648
    2013-01-07  0.404705  0.577046
    2013-01-08 -0.370647 -1.157892
    2013-01-09  1.075770 -0.109050
    2013-01-10  0.357021 -0.674600
    

    インライン列参照を使用する

    In [32]: pd.read_hdf(path, 'dfq',
       ....:             where="A>0 or C>0")
       ....: 
    Out[32]: 
                       A         B         C         D
    2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
    2013-01-02  1.212112 -0.173215  0.119209 -1.044236
    2013-01-04  0.721555 -0.706771 -1.039575  0.271860
    2013-01-05 -0.424972  0.567020  0.276232 -1.087401
    2013-01-07  0.404705  0.577046 -1.715002 -1.039268
    2013-01-09  1.075770 -0.109050  1.643563 -1.469388
    2013-01-10  0.357021 -0.674600 -1.776904 -0.968914
    
  • formatキーワードがtableキーワードの代わりになりました。許可される値はfixed(f)またはtable(t)で、0.13.0以前のデフォルトと同じです。例えば、putfixed形式を意味し、appendtable形式を意味します。このデフォルト形式は、オプションio.hdf.default_formatを設定することで設定できます。

    In [33]: path = 'test.h5'
    
    In [34]: df = pd.DataFrame(np.random.randn(10, 2))
    
    In [35]: df.to_hdf(path, key='df_table', format='table')
    
    In [36]: df.to_hdf(path, key='df_table2', append=True)
    
    In [37]: df.to_hdf(path, key='df_fixed')
    
    In [38]: with pd.HDFStore(path) as store:
       ....:     print(store)
       ....: 
    <class 'pandas.io.pytables.HDFStore'>
    File path: test.h5
    
  • テーブル書き込みパフォーマンスが大幅に向上

  • テーブル形式で渡されたSeriesを処理する(GH 4330

  • timedelta64[ns] dtypeをテーブルにシリアル化できるようになりました(GH 3577)。ドキュメントを参照してください。

  • 基盤となるファイルハンドルがis_openかどうかを示すis_openプロパティが追加されました。閉じたストアは、ストアを表示したときに「CLOSED」と報告するようになりました(エラーを発生させるのではなく)(GH 4409)。

  • HDFStoreを閉じると、そのHDFStoreのインスタンスは閉じられますが、実際のファイルが閉じられるのは、開いているすべてのハンドルに対する参照カウント(PyTablesによる)が0の場合のみです。基本的に、変数によって参照されるHDFStoreのローカルインスタンスがあります。閉じると、閉じられたと報告されます。他の参照(同じファイルへの)は、それら自体が閉じられるまで動作し続けます。閉じられたファイルに対してアクションを実行すると、ClosedFileErrorが発生します。

    In [39]: path = 'test.h5'
    
    In [40]: df = pd.DataFrame(np.random.randn(10, 2))
    
    In [41]: store1 = pd.HDFStore(path)
    
    In [42]: store2 = pd.HDFStore(path)
    
    In [43]: store1.append('df', df)
    
    In [44]: store2.append('df2', df)
    
    In [45]: store1
    Out[45]: 
    <class 'pandas.io.pytables.HDFStore'>
    File path: test.h5
    
    In [46]: store2
    Out[46]: 
    <class 'pandas.io.pytables.HDFStore'>
    File path: test.h5
    
    In [47]: store1.close()
    
    In [48]: store2
    Out[48]: 
    <class 'pandas.io.pytables.HDFStore'>
    File path: test.h5
    
    In [49]: store2.close()
    
    In [50]: store2
    Out[50]: 
    <class 'pandas.io.pytables.HDFStore'>
    File path: test.h5
    
  • テーブルから重複行を取得する際にDuplicateWarningで置き換えられた_quiet属性を削除しました(GH 4367)。

  • openからwarn引数を削除しました。代わりに、OPENファイルハンドルでmode='w'を使用しようとすると、PossibleDataLossError例外が発生します(GH 4367)。

  • 渡されたlocations配列またはマスクをwhere条件として許可します(GH 4467)。例についてはドキュメントを参照してください。

  • appendにキーワードdropna=Trueを追加して、すべてのNaN行をストアに書き込まないようにするかどうかを変更します(デフォルトはTrueで、すべてのNaN行は書き込まれません)。これはオプションio.hdf.dropna_tableでも設定できます(GH 4625)。

  • ストア作成引数を渡す; インメモリストアをサポートするために使用可能

DataFrame reprの変更#

DataFrameのHTMLおよびプレーンテキスト表現は、特定のサイズを超えると短い情報ビューに切り替わる代わりに、テーブルの切り詰められたビューを表示するようになりました(GH 4886GH 5550)。これにより、小さなDataFrameが大きくなるにつれて表現の一貫性が向上します。

Truncated HTML representation of a DataFrame

情報ビューを取得するには、DataFrame.info()を呼び出します。大きなDataFrameのreprとして情報ビューを好む場合は、set_option('display.large_repr', 'info')を実行することでこれを設定できます。

機能強化#

  • df.to_clipboard()は、dfデータを直接Excelに貼り付けることができる新しいexcelキーワードを覚えました(デフォルトで有効)。(GH 5070)。

  • read_htmlは、ValueErrorをキャッチして発生させる代わりに、URLErrorを発生させるようになりました(GH 4303GH 4305)。

  • read_clipboard()to_clipboard()のテストを追加しました(GH 4282)。

  • クリップボード機能がPySideで動作するようになりました(GH 4282)。

  • プロット引数に重複する色とスタイル引数が含まれている場合に、より情報的なエラーメッセージを追加しました(GH 4402)。

  • to_dictは、出力タイプとしてrecordsを受け入れるようになりました。列キーの辞書配列を返します。(GH 4936

  • dummy_naを使用したget_dummiesでのNaN処理(GH 4446

    # previously, nan was erroneously counted as 2 here
    # now it is not counted at all
    In [51]: pd.get_dummies([1, 2, np.nan])
    Out[51]: 
         1.0    2.0
    0   True  False
    1  False   True
    2  False  False
    
    # unless requested
    In [52]: pd.get_dummies([1, 2, np.nan], dummy_na=True)
    Out[52]: 
         1.0    2.0    NaN
    0   True  False  False
    1  False   True  False
    2  False  False   True
    
  • timedelta64[ns]操作。ドキュメントを参照してください。

    警告

    これらの操作のほとんどはnumpy >= 1.7を必要とします。

    新しいトップレベルのto_timedeltaを使用すると、標準のtimedelta形式(to_csvによって生成される)のスカラーまたは配列をtimedeltaタイプ(ナノ秒単位のnp.timedelta64)に変換できます。

    In [53]: pd.to_timedelta('1 days 06:05:01.00003')
    Out[53]: Timedelta('1 days 06:05:01.000030')
    
    In [54]: pd.to_timedelta('15.5us')
    Out[54]: Timedelta('0 days 00:00:00.000015500')
    
    In [55]: pd.to_timedelta(['1 days 06:05:01.00003', '15.5us', 'nan'])
    Out[55]: TimedeltaIndex(['1 days 06:05:01.000030', '0 days 00:00:00.000015500', NaT], dtype='timedelta64[ns]', freq=None)
    
    In [56]: pd.to_timedelta(np.arange(5), unit='s')
    Out[56]: 
    TimedeltaIndex(['0 days 00:00:00', '0 days 00:00:01', '0 days 00:00:02',
                    '0 days 00:00:03', '0 days 00:00:04'],
                   dtype='timedelta64[ns]', freq=None)
    
    In [57]: pd.to_timedelta(np.arange(5), unit='d')
    Out[57]: TimedeltaIndex(['0 days', '1 days', '2 days', '3 days', '4 days'], dtype='timedelta64[ns]', freq=None)
    

    timedelta64[ns] dtypeのSeriesは、別のtimedelta64[ns]オブジェクトで除算したり、astypeしてfloat64 dtyped Seriesを生成できるようになりました。これは周波数変換です。詳細についてはドキュメントを参照してください。

    In [58]: import datetime
    
    In [59]: td = pd.Series(pd.date_range('20130101', periods=4)) - pd.Series(
       ....:     pd.date_range('20121201', periods=4))
       ....: 
    
    In [60]: td[2] += np.timedelta64(datetime.timedelta(minutes=5, seconds=3))
    
    In [61]: td[3] = np.nan
    
    In [62]: td
    Out[62]: 
    0   31 days 00:00:00
    1   31 days 00:00:00
    2   31 days 00:05:03
    3                NaT
    dtype: timedelta64[ns]
    
    # to days
    In [63]: td / np.timedelta64(1, 'D')
    Out[63]:
    0    31.000000
    1    31.000000
    2    31.003507
    3          NaN
    dtype: float64
    
    In [64]: td.astype('timedelta64[D]')
    Out[64]:
    0    31.0
    1    31.0
    2    31.0
    3     NaN
    dtype: float64
    
    # to seconds
    In [65]: td / np.timedelta64(1, 's')
    Out[65]:
    0    2678400.0
    1    2678400.0
    2    2678703.0
    3          NaN
    dtype: float64
    
    In [66]: td.astype('timedelta64[s]')
    Out[66]:
    0    2678400.0
    1    2678400.0
    2    2678703.0
    3          NaN
    dtype: float64
    

    timedelta64[ns] Seriesを整数または整数Seriesで除算または乗算する

    In [63]: td * -1
    Out[63]: 
    0   -31 days +00:00:00
    1   -31 days +00:00:00
    2   -32 days +23:54:57
    3                  NaT
    dtype: timedelta64[ns]
    
    In [64]: td * pd.Series([1, 2, 3, 4])
    Out[64]: 
    0   31 days 00:00:00
    1   62 days 00:00:00
    2   93 days 00:15:09
    3                NaT
    dtype: timedelta64[ns]
    

    絶対DateOffsetオブジェクトはtimedeltasと同等に機能します

    In [65]: from pandas import offsets
    
    In [66]: td + offsets.Minute(5) + offsets.Milli(5)
    Out[66]: 
    0   31 days 00:05:00.005000
    1   31 days 00:05:00.005000
    2   31 days 00:10:03.005000
    3                       NaT
    dtype: timedelta64[ns]
    

    fillnaがtimedeltasでサポートされるようになりました

    In [67]: td.fillna(pd.Timedelta(0))
    Out[67]: 
    0   31 days 00:00:00
    1   31 days 00:00:00
    2   31 days 00:05:03
    3    0 days 00:00:00
    dtype: timedelta64[ns]
    
    In [68]: td.fillna(datetime.timedelta(days=1, seconds=5))
    Out[68]: 
    0   31 days 00:00:00
    1   31 days 00:00:00
    2   31 days 00:05:03
    3    1 days 00:00:05
    dtype: timedelta64[ns]
    

    timedeltasに対して数値削減操作を実行できます。

    In [69]: td.mean()
    Out[69]: Timedelta('31 days 00:01:41')
    
    In [70]: td.quantile(.1)
    Out[70]: Timedelta('31 days 00:00:00')
    
  • plot(kind='kde')は、オプションパラメータbw_methodindを受け入れるようになりました。これらは、それぞれ帯域幅を設定するためにscipy.stats.gaussian_kde()(scipy >= 0.11.0の場合)に、評価されるインデックスを指定するためにgkde.evaluate()に渡されます。scipyドキュメントを参照してください。(GH 4298

  • DataFrameコンストラクタは、numpyマスクされたレコード配列を受け入れるようになりました(GH 3478)。

  • 新しいベクトル化された文字列メソッドextractは、正規表現の一致をより便利に返します。

    In [71]: pd.Series(['a1', 'b2', 'c3']).str.extract('[ab](\\d)')
    Out[71]: 
         0
    0    1
    1    2
    2  NaN
    

    一致しない要素はNaNを返します。複数のグループを持つ正規表現を抽出すると、グループごとに1つの列を持つDataFrameが返されます。

    In [72]: pd.Series(['a1', 'b2', 'c3']).str.extract('([ab])(\\d)')
    Out[72]: 
         0    1
    0    a    1
    1    b    2
    2  NaN  NaN
    

    一致しない要素はNaNの行を返します。したがって、乱雑な文字列のSeriesは、タプルやre.matchオブジェクトにアクセスするためにget()を必要とせずに、クリーンアップされた、またはより有用な文字列の同じインデックスを持つSeriesまたはDataFrameに変換できます。

    名前付きグループ

    In [73]: pd.Series(['a1', 'b2', 'c3']).str.extract(
       ....:     '(?P<letter>[ab])(?P<digit>\\d)')
       ....: 
    Out[73]: 
      letter digit
    0      a     1
    1      b     2
    2    NaN   NaN
    

    およびオプションのグループも使用できます。

    In [74]: pd.Series(['a1', 'b2', '3']).str.extract(
       ....:      '(?P<letter>[ab])?(?P<digit>\\d)')
       ....: 
    Out[74]: 
      letter digit
    0      a     1
    1      b     2
    2    NaN     3
    
  • read_stataはStata 13形式を受け入れるようになりました(GH 4291)。

  • read_fwfは、データが関数に提供された区切り文字を使用して正しく区切られ、適切に配置された列を持っている場合、ファイルの最初の100行から列の仕様を推測するようになりました(GH 4488)。

  • オフセットとしてナノ秒時間のサポート

    警告

    これらの操作にはnumpy >= 1.7が必要です。

    秒以下の範囲の期間変換が再構築され、ナノ秒まで拡張されました。ナノ秒範囲の期間が利用可能になりました。

    In [79]: pd.date_range('2013-01-01', periods=5, freq='5N')
    Out[79]:
    DatetimeIndex([          '2013-01-01 00:00:00',
                   '2013-01-01 00:00:00.000000005',
                   '2013-01-01 00:00:00.000000010',
                   '2013-01-01 00:00:00.000000015',
                   '2013-01-01 00:00:00.000000020'],
                  dtype='datetime64[ns]', freq='5N')
    

    またはオフセットとしての頻度

    In [75]: pd.date_range('2013-01-01', periods=5, freq=pd.offsets.Nano(5))
    Out[75]: 
    DatetimeIndex([          '2013-01-01 00:00:00',
                   '2013-01-01 00:00:00.000000005',
                   '2013-01-01 00:00:00.000000010',
                   '2013-01-01 00:00:00.000000015',
                   '2013-01-01 00:00:00.000000020'],
                  dtype='datetime64[ns]', freq='5ns')
    

    タイムスタンプはナノ秒単位で変更できます。

    In [76]: t = pd.Timestamp('20130101 09:01:02')
    
    In [77]: t + pd.tseries.offsets.Nano(123)
    Out[77]: Timestamp('2013-01-01 09:01:02.000000123')
    
  • DataFrames用の新しいメソッドisinが追加され、ブールインデックス付けとうまく連携します。isinの引数(DataFrameと比較する対象)は、DataFrame、Series、辞書、または値の配列にすることができます。詳細についてはドキュメントを参照してください。

    いずれかの条件が満たされている行を取得するには

    In [78]: dfi = pd.DataFrame({'A': [1, 2, 3, 4], 'B': ['a', 'b', 'f', 'n']})
    
    In [79]: dfi
    Out[79]: 
       A  B
    0  1  a
    1  2  b
    2  3  f
    3  4  n
    
    In [80]: other = pd.DataFrame({'A': [1, 3, 3, 7], 'B': ['e', 'f', 'f', 'e']})
    
    In [81]: mask = dfi.isin(other)
    
    In [82]: mask
    Out[82]: 
           A      B
    0   True  False
    1  False  False
    2   True   True
    3  False  False
    
    In [83]: dfi[mask.any(axis=1)]
    Out[83]: 
       A  B
    0  1  a
    2  3  f
    
  • Seriesは、単一列のDataFrameに変換するためのto_frameメソッドをサポートするようになりました(GH 5164)。

  • ここにリストされているすべてのRデータセットhttp://stat.ethz.ch/R-manual/R-devel/library/datasets/html/00Index.htmlがpandasオブジェクトにロードできるようになりました

    # note that pandas.rpy was deprecated in v0.16.0
    import pandas.rpy.common as com
    com.load_data('Titanic')
    
  • tz_localizeは、未ローカライズデータの構造に基づいて秋の夏時間移行を推測できます(GH 4230)。ドキュメントを参照してください。

  • DatetimeIndexはAPIドキュメントに追加されました。ドキュメントを参照してください。

  • json_normalize()は、半構造化されたJSONデータからフラットなテーブルを作成できる新しいメソッドです。ドキュメントを参照してください(GH 1067)。

  • qtpandas DataFrameModelとDataFrameWidgetのPySideサポートを追加しました。

  • Python csvパーサーがusecolsをサポートするようになりました(GH 4335)。

  • 周波数はいくつかの新しいオフセットを獲得しました

  • DataFrameはSeriesと同様の新しいinterpolateメソッドを持ちます(GH 4434GH 1892)。

    In [84]: df = pd.DataFrame({'A': [1, 2.1, np.nan, 4.7, 5.6, 6.8],
       ....:                   'B': [.25, np.nan, np.nan, 4, 12.2, 14.4]})
       ....: 
    
    In [85]: df.interpolate()
    Out[85]: 
         A      B
    0  1.0   0.25
    1  2.1   1.50
    2  3.4   2.75
    3  4.7   4.00
    4  5.6  12.20
    5  6.8  14.40
    

    さらに、interpolatemethod引数は、'nearest', 'zero', 'slinear', 'quadratic', 'cubic', 'barycentric', 'krogh', 'piecewise_polynomial', 'pchip', 'polynomial', 'spline'を含むように拡張されました。新しいメソッドにはscipyが必要です。様々なメソッドが適切である状況に関する詳細については、Scipyリファレンスガイドドキュメントを参照してください。ドキュメントを参照してください。

    補間はlimitキーワード引数も受け入れるようになりました。これはfillnaのlimitと同様に機能します。

    In [86]: ser = pd.Series([1, 3, np.nan, np.nan, np.nan, 11])
    
    In [87]: ser.interpolate(limit=2)
    Out[87]: 
    0     1.0
    1     3.0
    2     5.0
    3     7.0
    4     NaN
    5    11.0
    dtype: float64
    
  • wide_to_longパネルデータコンビニエンス関数が追加されました。ドキュメントを参照してください。

    In [88]: np.random.seed(123)
    
    In [89]: df = pd.DataFrame({"A1970" : {0 : "a", 1 : "b", 2 : "c"},
       ....:                    "A1980" : {0 : "d", 1 : "e", 2 : "f"},
       ....:                    "B1970" : {0 : 2.5, 1 : 1.2, 2 : .7},
       ....:                    "B1980" : {0 : 3.2, 1 : 1.3, 2 : .1},
       ....:                    "X"     : dict(zip(range(3), np.random.randn(3)))
       ....:                   })
       ....: 
    
    In [90]: df["id"] = df.index
    
    In [91]: df
    Out[91]: 
      A1970 A1980  B1970  B1980         X  id
    0     a     d    2.5    3.2 -1.085631   0
    1     b     e    1.2    1.3  0.997345   1
    2     c     f    0.7    0.1  0.282978   2
    
    In [92]: pd.wide_to_long(df, ["A", "B"], i="id", j="year")
    Out[92]: 
                    X  A    B
    id year                  
    0  1970 -1.085631  a  2.5
    1  1970  0.997345  b  1.2
    2  1970  0.282978  c  0.7
    0  1980 -1.085631  d  3.2
    1  1980  0.997345  e  1.3
    2  1980  0.282978  f  0.1
    
  • to_csvは、出力のdatetimeオブジェクトの書式設定方法を指定するdate_formatキーワード引数を受け入れるようになりました。インデックス、列、値で検出されたdatetimeはすべて、この書式設定が適用されます(GH 4313)。

  • DataFrame.plotは、kind='scatter'を渡すことでx対yの散布図を描画します(GH 2215)。

  • Google Analytics v3 APIセグメントIDのサポートを追加しました。これはv2 IDもサポートしています。(GH 5271

実験的#

  • 新しいeval()関数は、舞台裏でnumexprを使用して式評価を実装します。これにより、大規模なDataFrame/Seriesを含む複雑な式に対して大きな高速化が実現します。たとえば、

    In [93]: nrows, ncols = 20000, 100
    
    In [94]: df1, df2, df3, df4 = [pd.DataFrame(np.random.randn(nrows, ncols))
       ....:                       for _ in range(4)]
       ....: 
    
    # eval with NumExpr backend
    In [95]: %timeit pd.eval('df1 + df2 + df3 + df4')
    4.9 ms +- 584 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
    
    # pure Python evaluation
    In [96]: %timeit df1 + df2 + df3 + df4
    3.35 ms +- 244 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
    

    詳細については、ドキュメントを参照してください。

  • pandas.evalと同様に、DataFrameには、DataFrameのコンテキストで式を評価する新しいDataFrame.evalメソッドがあります。たとえば、

    In [97]: df = pd.DataFrame(np.random.randn(10, 2), columns=['a', 'b'])
    
    In [98]: df.eval('a + b')
    Out[98]: 
    0   -0.685204
    1    1.589745
    2    0.325441
    3   -1.784153
    4   -0.432893
    5    0.171850
    6    1.895919
    7    3.065587
    8   -0.092759
    9    1.391365
    dtype: float64
    
  • query()メソッドが追加され、Pythonの構文とほぼ同じ自然なクエリ構文を使用してDataFrameの要素を選択できるようになりました。例えば、

    In [99]: n = 20
    
    In [100]: df = pd.DataFrame(np.random.randint(n, size=(n, 3)), columns=['a', 'b', 'c'])
    
    In [101]: df.query('a < b < c')
    Out[101]: 
        a   b   c
    11  1   5   8
    15  8  16  19
    

    a < b < cTrueと評価されるdfのすべての行を選択します。詳細についてはドキュメントを参照してください。

  • pd.read_msgpack()pd.to_msgpack()は、軽量でポータブルなバイナリ形式で任意のpandas(およびpythonオブジェクト)をシリアル化するためのサポートされているメソッドになりました。ドキュメントを参照してください。

    警告

    これは実験的なライブラリであるため、将来のリリースまでストレージ形式は安定しない可能性があります。

    df = pd.DataFrame(np.random.rand(5, 2), columns=list('AB'))
    df.to_msgpack('foo.msg')
    pd.read_msgpack('foo.msg')
    
    s = pd.Series(np.random.rand(5), index=pd.date_range('20130101', periods=5))
    pd.to_msgpack('foo.msg', df, s)
    pd.read_msgpack('foo.msg')
    

    iterator=Trueを渡すことで、解凍された結果をイテレートできます。

    for o in pd.read_msgpack('foo.msg', iterator=True):
        print(o)
    
  • pandas.io.gbqは、pandas DataFramesを介してGoogleのBigQueryデータセットからデータを抽出し、ロードする簡単な方法を提供します。BigQueryは高性能なSQLライクなデータベースサービスであり、非常に大規模なデータセットに対するアドホッククエリの実行に役立ちます。ドキュメントを参照してください

    from pandas.io import gbq
    
    # A query to select the average monthly temperatures in the
    # in the year 2000 across the USA. The dataset,
    # publicata:samples.gsod, is available on all BigQuery accounts,
    # and is based on NOAA gsod data.
    
    query = """SELECT station_number as STATION,
    month as MONTH, AVG(mean_temp) as MEAN_TEMP
    FROM publicdata:samples.gsod
    WHERE YEAR = 2000
    GROUP BY STATION, MONTH
    ORDER BY STATION, MONTH ASC"""
    
    # Fetch the result set for this query
    
    # Your Google BigQuery Project ID
    # To find this, see your dashboard:
    # https://console.developers.google.com/iam-admin/projects?authuser=0
    projectid = 'xxxxxxxxx'
    df = gbq.read_gbq(query, project_id=projectid)
    
    # Use pandas to process and reshape the dataset
    
    df2 = df.pivot(index='STATION', columns='MONTH', values='MEAN_TEMP')
    df3 = pd.concat([df2.min(), df2.mean(), df2.max()],
                    axis=1, keys=["Min Tem", "Mean Temp", "Max Temp"])
    

    結果のDataFrameは

    > df3
                Min Tem  Mean Temp    Max Temp
     MONTH
     1     -53.336667  39.827892   89.770968
     2     -49.837500  43.685219   93.437932
     3     -77.926087  48.708355   96.099998
     4     -82.892858  55.070087   97.317240
     5     -92.378261  61.428117  102.042856
     6     -77.703334  65.858888  102.900000
     7     -87.821428  68.169663  106.510714
     8     -89.431999  68.614215  105.500000
     9     -86.611112  63.436935  107.142856
     10    -78.209677  56.880838   92.103333
     11    -50.125000  48.861228   94.996428
     12    -50.332258  42.286879   94.396774
    

    警告

    このモジュールを使用するには、BigQueryアカウントが必要です。詳細は <https://cloud.google.com/products/big-query> を参照してください。

    2013年10月10日現在、GoogleのAPIには、結果セットが100,000行を超えるのを防ぐバグがあります。パッチは2013年10月14日の週に予定されています。

内部リファクタリング#

0.13.0では、主にSeriesNDFrame(現在DataFramePanelの基本クラス)のサブクラスとすることで、メソッドと振る舞いを統一する大規模なリファクタリングが行われました。Seriesは以前、ndarrayから直接サブクラス化されていました。(GH 4080GH 3862GH 816

警告

0.13.0以前との潜在的な非互換性が2つあります。

  • 以前は、一部のnumpy関数にSeriesを引数として渡すと、Seriesが返されていました。これはnp.ones_likenp.empty_likenp.diffnp.whereにのみ影響するようです。これらは現在ndarrayを返します。

    In [102]: s = pd.Series([1, 2, 3, 4])
    

    Numpyの使用法

    In [103]: np.ones_like(s)
    Out[103]: array([1, 1, 1, 1])
    
    In [104]: np.diff(s)
    Out[104]: array([1, 1, 1])
    
    In [105]: np.where(s > 1, s, np.nan)
    Out[105]: array([nan,  2.,  3.,  4.])
    

    Pandasの使用法

    In [106]: pd.Series(1, index=s.index)
    Out[106]: 
    0    1
    1    1
    2    1
    3    1
    dtype: int64
    
    In [107]: s.diff()
    Out[107]: 
    0    NaN
    1    1.0
    2    1.0
    3    1.0
    dtype: float64
    
    In [108]: s.where(s > 1)
    Out[108]: 
    0    NaN
    1    2.0
    2    3.0
    3    4.0
    dtype: float64
    
  • ndarray型を期待するCython関数にSeriesを直接渡すと、直接動作しなくなりました。代わりにSeries.valuesを渡す必要があります。パフォーマンスの向上を参照してください。

  • Series(0.5)は以前はスカラ0.5を返していましたが、代わりに1要素のSeriesを返します。

  • この変更によりrpy2<=2.3.8が壊れます。rpy2に対して問題が開かれ、回避策はGH 5698に詳細が記載されています。@JanSchulzに感謝します。

  • 0.13以前に作成されたピックルとの互換性は維持されています。これらはpd.read_pickleでアンピックルする必要があります。ピクル化を参照してください。

  • series.py/frame.py/panel.pyをリファクタリングし、共通コードをgeneric.pyに移動しました。

    • 汎用NDFrame構造を作成する_setup_axesを追加

    • 移動したメソッド

      • from_axes,_wrap_array,axes,ix,loc,iloc,shape,empty,swapaxes,transpose,pop

      • __iter__,keys,__contains__,__len__,__neg__,__invert__

      • convert_objects,as_blocks,as_matrix,values

      • __getstate__,__setstate__ (compatはframe/panelに残ります)

      • __getattr__,__setattr__

      • _indexed_same,reindex_like,align,where,mask

      • fillna,replace (SeriesのreplaceはDataFrameと一貫性があります)

      • filter(異なる軸で選択的にフィルタリングするためのaxis引数も追加)

      • reindex,reindex_axis,take

      • truncateNDFrameの一部となるように移動)

  • これらは、PanelDataFrameとより一貫性のあるものにするAPIの変更です。

    • 同じ軸が指定されたPanelでのswapaxesは、コピーを返すようになりました。

    • 設定のための属性アクセスをサポート

    • フィルターは、元のDataFrameフィルターと同じAPIをサポートしています。

  • 引数なしで呼び出されたReindexは、入力オブジェクトのコピーを返すようになりました。

  • TimeSeriesSeriesのエイリアスになりました。is_time_seriesプロパティを使用して区別できます(必要に応じて)。

  • BlockManagerを使用するためのSparseオブジェクトのリファクタリング

    • 内部に新しいブロックタイプSparseBlockを作成しました。これは、複数のdtypesを保持でき、結合できません。SparseSeriesSparseDataFrameは、その階層(Series/DataFrame)からより多くのメソッドを継承するようになり、SparseArray(これはSparseBlockのオブジェクトです)から継承しなくなりました。

    • Sparseスイートは、非スパースデータとの統合をサポートするようになりました。非浮動小数点スパースデータはサポート可能です(部分的に実装済み)。

    • DataFrames内のスパース構造に対する操作はスパース性を維持するはずですが、マージタイプ操作は密(そしてスパースに戻る)に変換されるため、効率がいくらか低下する可能性があります。

    • ブール値/整数/スライスに対してSparseSeriesのsetitemを有効にする

    • SparsePanelsの実装は変更されていません(例えば、BlockManagerを使用していません、作業が必要です)。

  • dtypesと同様に、Series/DataFrameにftypesメソッドを追加しました。これは、基盤が疎/密であるかどうか(およびdtype)を示します。

  • すべてのNDFrameオブジェクトは、__finalize__()を使用して、既存のオブジェクトから新しいオブジェクトに伝播するさまざまな値を指定できるようになりました(例:Seriesnameがより自動的に追従するようになりました)。

  • 内部の型チェックは、@jtratnerの好意により、生成されたクラスのスイートを介して行われるようになり、klassを直接インポートする必要なくisinstance(value, klass)が可能になりました。

  • Seriesの更新におけるバグで、親フレームが変更に基づいてキャッシュを更新しない(GH 4080)またはタイプに基づいてキャッシュを更新しない(GH 3217)、fillna(GH 3386)。

  • dtype変換を伴うインデックス付けが修正されました(GH 4463GH 4204)。

  • Series.reindexをcore/generic.pyにリファクタリング(GH 4604GH 4618)、Seriesでの再インデックス付けでmethod=が機能するようにしました。

  • Series.copyorderパラメータを受け入れなくなり、NDFrameのコピーと一貫性を持つようになりました。

  • renameメソッドをcore/generic.pyにリファクタリング。これにより、(GH 4605)のSeries.renameが修正され、Panelに同じシグネチャを持つrenameが追加されました。

  • clipメソッドをcore/generic.pyにリファクタリング(GH 4798

  • _get_numeric_data/_get_bool_dataをcore/generic.pyにリファクタリングし、Series/Panel機能に対応

  • Series(インデックス用)/Panel(アイテム用)は、その要素への属性アクセスを許可するようになりました(GH 1903)。

    In [109]: s = pd.Series([1, 2, 3], index=list('abc'))
    
    In [110]: s.b
    Out[110]: 2
    
    In [111]: s.a = 5
    
    In [112]: s
    Out[112]: 
    a    5
    b    2
    c    3
    dtype: int64
    

バグ修正#

  • HDFストア

    • 異なるブロック順序で追加すると、ValueErrorではなく無効なTypeErrorが発生する(GH 4096

    • read_hdfが渡されたmodeを尊重していなかった(GH 4504

    • 0長のテーブルを追加すると正しく動作します(GH 4273)。

    • to_hdfは、appendtableの両方の引数を渡すとエラーを発生させていました(GH 4584)。

    • ストアから読み取り中に、異なるdtypeの重複する列があると例外が発生していました(GH 4767)。

    • 列名が文字列ではない場合にValueErrorが正しく発生しなかったバグを修正しました(GH 4956)。

    • 固定形式で書き込まれた0長シリーズが適切に逆シリアル化されないバグ。(GH 4708

    • pyt3でのデコード性能問題を修正(GH 5441

    • MultiIndexに保存する前にレベルを検証する(GH 5527

    • data_columnsをPanelで正しく処理する(GH 5717)。

  • tslib.tz_convert(vals, tz1, tz2) のバグを修正: trans[pos + 1] にアクセスしようとしたときに IndexError 例外が発生する可能性がありました (GH 4496)

  • *.histプロットメソッドで、by引数がlayout引数と正しく動作するようになりました(GH 4102GH 4014)。

  • PeriodIndex.mapstrを使用すると、インデックスのstr表現が返されるバグを修正しました(GH 4136)。

  • カスタムmatplotlibのデフォルトカラー使用時にtest_time_series_plot_color_with_empty_kwargsのテスト失敗を修正しました(GH 4345)。

  • Stata IOテストの実行を修正。一時ファイルを使って書き込むようになりました(GH 4353)。

  • DataFrame.sumが整数値のフレームに対してDataFrame.meanよりも遅いバグを修正しました(GH 4365)。

  • read_htmlのテストはPython 2.6で動作するようになりました(GH 4351)。

  • networkテストでローカル変数が未定義のためNameErrorが発生していたバグを修正しました(GH 4381)。

  • to_jsonでは、重複するインデックスのためにデータが失われる可能性があるorientが渡された場合に例外を発生させるようになりました(GH 4359)。

  • to_jsonにおける日付処理を修正し、ドキュメント文字列に記載されているようにミリ秒がデフォルトのタイムスタンプとなるようにしました(GH 4362)。

  • groupby applyを実行する際にas_indexが無視されなくなりました(GH 4648GH 3417)。

  • JSONのNaT処理が修正され、NaTはnullにシリアル化されるようになりました(GH 4498)。

  • JSONオブジェクトキー内のエスケープ可能な文字のJSON処理を修正しました(GH 4593)。

  • na_values=Noneの場合にkeep_default_na=Falseを渡すバグを修正しました(GH 4318)。

  • 重複する列と混合されたdtypesを持つDataFrameでvaluesがエラーを発生させるバグを修正しました。(GH 4377

  • read_jsonorient='split'の場合の重複列と型変換のバグを修正しました(GH 4377)。

  • 小数点記号が「.」以外のロケールで、特定の値をエンコード/デコードする際に例外が発生するJSONバグを修正しました(GH 4918)。

  • PeriodIndexを使用した.iatのインデックス付けを修正しました(GH 4390)。

  • PeriodIndexが自身と結合する際に、同じインスタンスではなく新しいインスタンスを返していたバグを修正しました(GH 4379)。また、他のインデックスタイプについてもこのテストを追加しました。

  • usecolsパラメータ付きでCSV cparserを使用すると、すべてのdtypesがオブジェクトに変換されるバグを修正しました(GH 3192)。

  • ブロックのマージで、結果のDataFrameが部分的に_ref_locsを設定していたバグを修正しました(GH 4403)。

  • トップレベルのmatplotlib APIを使用してhistサブプロットが呼び出されたときに、それらが上書きされていた問題を修正しました(GH 4408)。

  • Series.astype(str)を呼び出すと文字列が切り詰められるバグを修正しました(GH 4405GH 4437)。

  • py3の互換性の問題を修正しました。バイトがタプルとしてrepr'dされていました(GH 4455)。

  • アイテムが「a」と命名された場合のパネル属性名の競合を修正しました(GH 3440)。

  • 重複したインデックスがプロット時に例外を発生させていた問題を修正しました(GH 4486)。

  • cumsumとcumprodがbool dtypeで動作しなかったバグを修正しました(GH 4170GH 4440)。

  • xsで誤った縮小オブジェクトを返していたPanelのスライシング問題を修正しました(GH 4016)。

  • リサンプリングのバグを修正しました。グループが1つしかない場合にカスタムのreduce関数が使用されない問題を修正しました(GH 3849GH 4494)。

  • 転置されたフレームでのパネル代入を修正しました(GH 3830)。

  • Panelと、整列が必要な値としてのPanelによるセットインデックス付けで例外を発生させる(GH 3777

  • Seriesコンストラクタでfrozensetオブジェクトが例外を発生させるようになりました(GH 4482GH 4480)。

  • 複数のdtypeを持つ重複MultiIndexをソートする際の問題を修正しました(GH 4516)。

  • DataFrame.set_valuesのバグを修正しました。これは、インデックスを拡張する際に名前属性が失われる原因となっていました。(GH 3742GH 4039

  • MultiIndexで個々のnameslevelslabelsが検証なしで設定できる問題を修正しました(GH 3714GH 4039)。

  • pivot_tableの(GH 3334)を修正。valuesがインデックスの場合、マージンが計算されませんでした。

  • datetimeとの演算時にnp.timedelta64またはnp.offsets.DateOffsetのrhsがある場合のバグを修正しました(GH 4532)。

  • Series/DatetimeIndexとnp.timedelta64の算術演算が同じように動作しないバグ(GH 4134)、およびNumPy 1.6でのバグのあるtimedeltaを修正(GH 4135)。

  • PY3を使用したWindowsでのpd.read_clipboardのバグを修正しました(GH 4561)。デコードが正しく行われていませんでした。

  • tslib.get_period_field()およびtslib.get_period_field_arr()は、コード引数が範囲外の場合に例外を発生させるようになりました(GH 4519GH 4520)。

  • 空のシリーズでのブールインデックス付けでインデックス名が失われるバグを修正しました(GH 4235)。infer_dtypeは空の配列で動作します。

  • 複数の軸を持つ再インデックス付けを修正しました。軸の一致が現在の軸を置き換えておらず、遅延周波数推論の問題につながる可能性がありました(GH 3317)。

  • DataFrame.applyが誤って例外を再発生させていたバグを修正しました(元のスタックトレースが切り詰められる原因となっていました)。

  • ix/locとnon_uniqueセレクタによる選択を修正しました(GH 4619)。

  • 既存の列のdtype変更を含むiloc/locによる代入を修正しました(GH 4312GH 5702)。core/indexingでBlock.setitemを使用するための内部setitem_with_indexerを持ちます。

  • csv_importで浮動小数点数に対する千単位の演算子が正しく処理されなかったバグを修正しました(GH 4322)。

  • CacheableOffsetが多くのDateOffsetによって適切に使用されていなかった問題を修正しました。これにより、DateOffsetのキャッシュが妨げられていました(GH 4609)。

  • DataFrameがlhsにあり、list/tupleがrhsにある場合のブール比較のエラーを修正しました(GH 4576)。

  • Series/DataFrameNoneのsetitemにおけるエラー/dtype変換を修正しました(GH 4667)。

  • pd.read_stataで、渡された非デフォルトエンコーディングに基づくデコードを修正しました(GH 4626)。

  • プレーンな ndarray を使用した DataFrame.from_records の修正。(GH 4727)

  • Index.rename および MultiIndex.rename などに関するいくつかの不整合を修正。(GH 4718, GH 4628)

  • クロスセクションおよび重複インデックスで iloc/loc を使用する際のバグ。(GH 4726)

  • to_csvQUOTE_NONE を使用すると Exception が発生するバグ。(GH 4328)

  • 右辺の長さが正しくない場合でも Series インデックス付けがエラーを発生させないバグ。(GH 2702)

  • MultIndex の一部として部分的な文字列選択を使用した MultiIndexing のバグ。(GH 4758)

  • 一意でないインデックスを持つインデックスでの再インデックス付けのバグが ValueError を発生させるようになりました。(GH 4746)

  • MultiIndex 軸と NumPy 配列を持つ単一のインデクサーで loc/ix を設定する際のバグ。(GH 3777 に関連)

  • dtypes 間で重複する列を持つ連結が axis=0 でマージされないバグ。(GH 4771, GH 4975)

  • スライスインデックスが失敗する iloc のバグ。(GH 4771)

  • read_fwf で colspecs または width がない場合の誤ったエラーメッセージ。(GH 4774)

  • 重複インデックスを持つ Series でのインデックス付けのバグを修正。(GH 4548, GH 4550)

  • Python 3 で read_fwf を使用して圧縮ファイルを読み込む際のバグを修正。(GH 3963)

  • 重複インデックスと dtype 変更を伴う割り当てに関する問題を修正。(GH 4686)

  • Python 3 で圧縮ファイルを str ではなく bytes として読み込む際のバグを修正。Python 3 でのバイト生成ファイル処理を簡素化。(GH 3963, GH 4785)

  • matplotlib の異なるバージョン間での対数スケール棒グラフの ticklocs/ticklabels に関連する問題を修正。(GH 4789)

  • repr() によって発行される内部呼び出しに関連する DeprecationWarning を抑制。(GH 4391)

  • 重複インデックスと .loc を使用した重複セレクターに関する問題を修正。(GH 4825)

  • DataFrame.sort_index で、単一の列でソートし、ascending にリストを渡した場合、ascending の引数が True と解釈されるバグを修正。(GH 4839, GH 4846)

  • Panel.tshift が機能しない問題を修正。Panel.shiftfreq サポートを追加。(GH 4853)

  • Python エンジン (つまり PythonParser) を使用した TextFileReader で thousands != “,” の問題を修正。(GH 4596)

  • where を使用した重複インデックスの getitem のバグ。(GH 4879)

  • 型推論コードが float 列を datetime に強制変換する問題を修正。(GH 4601)

  • _ensure_numeric が複素数をチェックしないバグを修正。(GH 4902)

  • by 引数が渡されたときに2つの図が作成される Series.hist のバグを修正。(GH 4112, GH 4113)。

  • > 2 ndims の convert_objects のバグを修正。(GH 4937)

  • DataFrame/Panel キャッシュの挿入とそれに続くインデックス付けのバグを修正。(GH 4939, GH 5424)

  • FrozenNDArray および FrozenList の文字列メソッドを修正。(GH 4929)

  • インデックスの拡張シナリオで無効な値または範囲外の値を設定する際のバグを修正。(GH 4940)

  • 空の Series での fillna のテスト。(GH 4346)、@immerrr さんに感謝

  • copy() が軸/インデックスもシャローコピーして個別のメタデータを保持するように修正。(GH 4202, GH 4830)

  • read_csv の Python パーサーでの skiprows オプションを修正。(GH 4382)

  • 明示的にラベルを渡さずに np.inf レベルで cut が機能しないバグを修正。(GH 3415)

  • DatetimeIndex.union での重複チェックの誤りを修正。(GH 4564)

  • csv_parser での千区切り記号と日付パーサーの間の競合を修正。(GH 4678)

  • dtypes が同じでない場合の追加を修正 (float/np.datetime64 の混在を示すエラー)。(GH 4993)

  • DateOffset の repr を修正。kwds に重複エントリが表示されなくなりました。未使用のオフセットフィールドを削除。(GH 4638)

  • usecols を使用した場合の read_csv 時の誤ったインデックス名を修正。C パーサーのみに適用。(GH 4201)

  • Timestamp オブジェクトが Series または DataFrame オブジェクトとの比較演算の左辺に現れるようになりました。(GH 4982)。

  • iloc/loc を介して np.nan でインデックス付けする際のバグを修正。(GH 5016)

  • メモリが少ない C パーサーが同じファイルの異なるチャンクで異なる型を作成する可能性のあるバグを修正。数値型に強制変換するか、警告を発生させるようになりました。(GH 3866)

  • Series をそれ自身の形状に再整形すると TypeError が発生するバグ (GH 4554) とその他の再整形の問題を修正。

  • ix/loc と混合 int/string インデックスを使用した設定のバグ。(GH 4544)

  • series-series のブール比較がラベルベースであることを確認。(GH 4947)

  • Timestamp 部分インデクサーを使用したマルチレベルインデックスのバグ。(GH 4294)

  • すべての NaN フレームの MultiIndex 構築に関するテスト/修正。(GH 4078)

  • read_html() がカンマを含むテーブルの値を正しく推測していなかったバグを修正。(GH 5029)

  • read_html() が返されるテーブルの安定した順序を提供していなかったバグを修正。(GH 4770, GH 5029)。

  • read_html()index_col=0 を渡されたときに誤って解析していたバグを修正。(GH 5066)。

  • read_html() がヘッダーの型を誤って推測していたバグを修正。(GH 5048)。

  • DatetimeIndexPeriodIndex の結合がスタックオーバーフローを引き起こしていたバグを修正。(GH 3899)。

  • groupby オブジェクトがプロットを許可していなかったバグを修正。(GH 5102)。

  • groupby オブジェクトが列名をタブ補完していなかったバグを修正。(GH 5102)。

  • groupby.plot() とその仲間が図を複数回複製していたバグを修正。(GH 5102)。

  • fillna での object dtypes の自動変換を提供。(GH 5103 に関連)

  • オプションパーサーのクリーニングでデフォルトオプションが上書きされていたバグを修正。(GH 5121)。

  • リストライクな iloc インデックス付けでリスト/ndarray を同じように扱う。(GH 5006)

  • 欠損値を持つ MultiIndex.get_level_values() を修正。(GH 5074)

  • datetime64 入力を持つ Timestamp() の境界チェックを修正。(GH 4065)

  • TestReadHtml が正しい read_html() 関数を呼び出していなかったバグを修正。(GH 5150)。

  • NDFrame.replace() で、置換が正規表現を (誤って) 使用しているかのように見えたバグを修正。(GH 5143)。

  • to_datetime のエラーメッセージを改善。(GH 4928)

  • travis-ci で異なるロケールがテストされるようにしました。(GH 4918)。また、ロケールを取得し、コンテキストマネージャーでロケールを設定するためのいくつかのユーティリティも追加されています。

  • isnull(MultiIndex) でのセグメンテーション違反を修正 (代わりにエラーを発生させるようになりました)。(GH 5123, GH 5125)

  • アラインメントを行う操作で重複インデックスを許可。(GH 5185, GH 5639)

  • コンストラクターでの複合 dtypes が NotImplementedError を発生させる。(GH 5191)

  • 重複フレームの比較のバグ。(GH 4421) に関連

  • 重複フレームの describe のバグ

  • format と coerce=True を使用した to_datetime がエラーを発生させないバグ。(GH 5195)

  • 複数のインデクサーとブロードキャストが必要な Series の右辺を持つ loc 設定のバグ。(GH 5206)

  • MultiIndex でのレベルまたはラベルのインプレース設定がキャッシュされた values プロパティをクリアせず、したがって誤った values を返すバグを修正。(GH 5215)

  • グループ化された DataFrame または Series をフィルタリングしたときに元の順序が維持されないバグを修正。(GH 4621)。

  • ビジネス日頻度を持つ Period が、非ビジネス日の場合は常に繰り上がるように修正。(GH 5203)

  • 重複する列名を持つフレームが正しく書き込まれない Excel ライターのバグを修正。(GH 5235)

  • Series での drop と一意でないインデックスの問題を修正。(GH 5248)

  • ファイル内の列数よりも多くの名前を渡すことによって引き起こされる C パーサーでのセグメンテーション違反を修正。(GH 5156)

  • 日付/時刻のような dtypes を持つ Series.isin を修正。(GH 5021)

  • C および Python パーサーが、インデックス名用の行がない、より一般的な MultiIndex 列形式を処理できるようになりました。(GH 4702)

  • 範囲外の日付をオブジェクト dtype として使用しようとするときのバグ。(GH 5312)

  • 組み込みの PandasObject を表示しようとするときのバグ。(GH 5324)

  • 結果が範囲外の場合、Timestamps の操作が datetime を返すことを許可するように修正。(GH 5312 に関連)

  • initObjToJSON() の戻り値/型シグネチャを numpy の import_array() と互換性があるように修正。(GH 5334, GH 5326)

  • DataFrame で名前変更後に set_index を行うときのバグ。(GH 5344)

  • グラフィックスのテスト時にテストスイートが一時ファイルを残さなくなりました。(GH 5347) (@yarikoptic さん、この発見に感謝します!)

  • win32 での HTML テストを修正。(GH 4580)

  • head/taililoc ベースであることを確認。(GH 5370)

  • 要素が 1 つまたは 2 つの場合の PeriodIndex 文字列表現のバグを修正。(GH 5372)

  • GroupBy メソッド transform および filter は、繰り返された (一意でない) インデックスを持つ Series および DataFrame で使用できるようになりました。(GH 4620)

  • 空の Series が repr で名前を表示しないバグを修正。(GH 4651)

  • テストがデフォルトで一時ディレクトリに一時ファイルを作成するようにしました。(GH 5419)

  • スカラに対する pd.to_timedelta はスカラを返します。(GH 5410)

  • pd.to_timedeltaNaN および NaT を受け入れ、エラーを発生させる代わりに NaT を返します。(GH 5437)

  • より大きなサイズの pandas オブジェクトでの isnull のパフォーマンス改善

  • インデクサーと長さが一致しない 1d ndarray を使用したさまざまな setitem のバグを修正。(GH 5508)

  • MultiIndex と iloc を使用した getitem のバグ。(GH 5528)

  • Series での delitem のバグ。(GH 5542)

  • カスタム関数を使用し、オブジェクトが変更されない場合の apply のバグ修正。(GH 5545)

  • loc を使用して一意でないインデックスから選択する際のバグ。(GH 5553)

  • ユーザー関数が None を返すときに groupby が非一貫性のある型を返すバグ。(GH 5592)

  • numpy 1.7.0 で ndarray.item から誤って IndexError が発生する回帰の回避策。(GH 5666)

  • 結果として一意でないインデックスを持つオブジェクトの繰り返しインデックス付けのバグ。(GH 5678)

  • Series と渡された series/dict を使用した fillna のバグ。(GH 5703)

  • datetime-like grouper を使用した groupby transform のバグ。(GH 5712)

  • 特定のキーを使用した場合の PY3 での MultiIndex 選択のバグ。(GH 5725)

  • 異なる dtypes の行方向の連結が特定の場合に失敗する問題。(GH 5754)

貢献者#

このリリースには合計で 77 人がパッチを提供しました。「+」が付いている人は初めてパッチを寄稿しました。

  • Agustín Herranz +

  • Alex Gaudio +

  • Alex Rothberg +

  • Andreas Klostermann +

  • Andreas Würl +

  • アンディ・ヘイデン

  • Ben Alex +

  • Benedikt Sauer +

  • Brad Buran

  • Caleb Epstein +

  • Chang She

  • クリストファー・ウィーラン

  • DSM +

  • Dale Jung +

  • Dan Birken

  • David Rasch +

  • Dieter Vandenbussche

  • Gabi Davar +

  • Garrett Drapala

  • Goyo +

  • Greg Reda +

  • Ivan Smirnov +

  • Jack Kelly +

  • Jacob Schaer +

  • Jan Schulz +

  • Jeff Tratner

  • Jeffrey Tratner

  • John McNamara +

  • John W. O’Brien +

  • Joris Van den Bossche

  • Justin Bozonier +

  • ケルシー・ジョーダル

  • Kevin Stone

  • Kieran O’Mahony

  • Kyle Hausmann +

  • Kyle Kelley +

  • Kyle Meyer

  • Mike Kelly

  • Mortada Mehyar +

  • Nick Foti +

  • Olivier Harris +

  • Ondřej Čertík +

  • PKEuS

  • Phillip Cloud

  • Pierre Haessig +

  • Richard T. Guy +

  • Roman Pekar +

  • Roy Hyunjin Han

  • スキッパー・シーボールド

  • Sten +

  • Thomas A Caswell +

  • Thomas Kluyver

  • Tiago Requeijo +

  • TomAugspurger

  • Trent Hauck

  • Valentin Haenel +

  • Viktor Kerkez +

  • Vincent Arel-Bundock

  • Wes McKinney

  • Wes Turner +

  • Weston Renoud +

  • ヤロスラフ・ハルチェンコ

  • Zach Dwiel +

  • chapman siu +

  • chappers +

  • d10genes +

  • danielballan

  • daydreamt +

  • engstrom +

  • jreback

  • monicaBee +

  • prossahl +

  • rockg +

  • unutbu +

  • westurner +

  • y-p

  • zach powers