バージョン 0.16.1 (2015年5月11日)#

これは0.16.0からのマイナーなバグ修正リリースであり、多数のバグ修正に加え、いくつかの新機能、機能強化、パフォーマンス改善が含まれています。すべてのユーザーにこのバージョンへのアップグレードをお勧めします。

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

  • カテゴリベースのインデックスであるCategoricalIndexのサポートについては、こちらを参照してください。

  • pandasへの貢献方法に関する新しいセクションは、こちらを参照してください。

  • 「結合、結合、連結」のドキュメントが改訂され、各操作をより理解しやすくするためのグラフィカルな例が含まれています。詳細はこちらを参照してください。

  • Series、DataFrames、Panelsからランダムサンプルを抽出するための新しいメソッドsample。詳細はこちらを参照してください。

  • デフォルトのIndexの表示がより統一された形式に変更されました。詳細はこちらを参照してください。

  • BusinessHour日時オフセットがサポートされるようになりました。詳細はこちらを参照してください。

  • 文字列操作をより簡単にするための.strアクセサのさらなる機能強化については、こちらを参照してください。

警告

pandas 0.17.0では、サブパッケージpandas.io.dataは、個別にインストール可能なパッケージ (GH 8961) のために削除されます。

機能強化#

CategoricalIndex#

重複するインデックスをサポートするのに役立つ新しいタイプのインデックスオブジェクトであるCategoricalIndexを導入しました。これはCategorical (v0.15.0で導入) を囲むコンテナであり、多数の重複要素を持つインデックスの効率的なインデックス付けと保存を可能にします。0.16.1より前では、DataFrame/Seriesのインデックスをcategory dtypeで設定すると、通常のオブジェクトベースのIndexに変換されていました。

In [1]: df = pd.DataFrame({'A': np.arange(6),
   ...:                    'B': pd.Series(list('aabbca'))
   ...:                           .astype('category', categories=list('cab'))
   ...:                    })
   ...:

In [2]: df
Out[2]:
   A  B
0  0  a
1  1  a
2  2  b
3  3  b
4  4  c
5  5  a

In [3]: df.dtypes
Out[3]:
A       int64
B    category
dtype: object

In [4]: df.B.cat.categories
Out[4]: Index(['c', 'a', 'b'], dtype='object')

インデックスを設定すると、CategoricalIndexが作成されます。

In [5]: df2 = df.set_index('B')

In [6]: df2.index
Out[6]: CategoricalIndex(['a', 'a', 'b', 'b', 'c', 'a'], categories=['c', 'a', 'b'], ordered=False, name='B', dtype='category')

__getitem__/.iloc/.loc/.ixによるインデックス付けは、重複するIndexの場合と同様に機能します。インデクサはカテゴリ内に存在する必要があり、そうでない場合は操作でエラーが発生します。

In [7]: df2.loc['a']
Out[7]:
   A
B
a  0
a  1
a  5

そしてCategoricalIndexを保持します。

In [8]: df2.loc['a'].index
Out[8]: CategoricalIndex(['a', 'a', 'a'], categories=['c', 'a', 'b'], ordered=False, name='B', dtype='category')

ソートはカテゴリの順序で並べられます。

In [9]: df2.sort_index()
Out[9]:
   A
B
c  4
a  0
a  1
a  5
b  2
b  3

インデックスに対するgroupby操作もインデックスの性質を保持します。

In [10]: df2.groupby(level=0).sum()
Out[10]:
   A
B
c  4
a  6
b  5

In [11]: df2.groupby(level=0).sum().index
Out[11]: CategoricalIndex(['c', 'a', 'b'], categories=['c', 'a', 'b'], ordered=False, name='B', dtype='category')

リインデックス操作は、渡されたインデクサのタイプに基づいて結果のインデックスを返します。つまり、リストを渡すと通常のIndexが返されます。一方、Categoricalでインデックス付けすると、渡されたCategorical dtypeのカテゴリに従ってインデックス付けされたCategoricalIndexが返されます。これにより、カテゴリにない値でも任意にインデックス付けできます。これは、任意のpandasインデックスをリインデックスできるのと同様です。

In [12]: df2.reindex(['a', 'e'])
Out[12]:
     A
B
a  0.0
a  1.0
a  5.0
e  NaN

In [13]: df2.reindex(['a', 'e']).index
Out[13]: pd.Index(['a', 'a', 'a', 'e'], dtype='object', name='B')

In [14]: df2.reindex(pd.Categorical(['a', 'e'], categories=list('abcde')))
Out[14]:
     A
B
a  0.0
a  1.0
a  5.0
e  NaN

In [15]: df2.reindex(pd.Categorical(['a', 'e'], categories=list('abcde'))).index
Out[15]: pd.CategoricalIndex(['a', 'a', 'a', 'e'],
                             categories=['a', 'b', 'c', 'd', 'e'],
                             ordered=False, name='B',
                             dtype='category')

詳細はドキュメントを参照してください。(GH 7629, GH 10038, GH 10039)

Sample#

Series、DataFrames、およびPanelsに新しいメソッドが追加されました: sample()。このメソッドは、返す行または列の特定の数、あるいは行または列の総数の分数を受け入れます。また、置換あり/なしのサンプリング、不均一サンプリングの重みとして列を渡すオプション、複製を容易にするためのシード値の設定も可能です。(GH 2419)

In [1]: example_series = pd.Series([0, 1, 2, 3, 4, 5])

# When no arguments are passed, returns 1
In [2]: example_series.sample()
Out[2]: 
3    3
Length: 1, dtype: int64

# One may specify either a number of rows:
In [3]: example_series.sample(n=3)
Out[3]: 
2    2
1    1
0    0
Length: 3, dtype: int64

# Or a fraction of the rows:
In [4]: example_series.sample(frac=0.5)
Out[4]: 
1    1
5    5
3    3
Length: 3, dtype: int64

# weights are accepted.
In [5]: example_weights = [0, 0, 0.2, 0.2, 0.2, 0.4]

In [6]: example_series.sample(n=3, weights=example_weights)
Out[6]: 
2    2
4    4
3    3
Length: 3, dtype: int64

# weights will also be normalized if they do not sum to one,
# and missing values will be treated as zeros.
In [7]: example_weights2 = [0.5, 0, 0, 0, None, np.nan]

In [8]: example_series.sample(n=1, weights=example_weights2)
Out[8]: 
0    0
Length: 1, dtype: int64

DataFrameに適用する場合、行からサンプリングするときにサンプリングの重みを指定するために列名を渡すことができます。

In [9]: df = pd.DataFrame({"col1": [9, 8, 7, 6], "weight_column": [0.5, 0.4, 0.1, 0]})

In [10]: df.sample(n=3, weights="weight_column")
Out[10]: 
   col1  weight_column
0     9            0.5
1     8            0.4
2     7            0.1

[3 rows x 2 columns]

文字列メソッドの機能強化#

v0.16.0から引き続き、以下の機能強化により、文字列操作がより簡単になり、標準のPython文字列操作との一貫性が向上しました。

  • IndexStringMethods (.strアクセサ) を追加しました (GH 9068)。

    .strアクセサは、SeriesIndexの両方で利用できるようになりました。

    In [11]: idx = pd.Index([" jack", "jill ", " jesse ", "frank"])
    
    In [12]: idx.str.strip()
    Out[12]: Index(['jack', 'jill', 'jesse', 'frank'], dtype='object')
    

    Index上の.strアクセサの特殊なケースとして、文字列メソッドがboolを返す場合、.strアクセサはブール値のIndexの代わりにnp.arrayを返します (GH 8875)。これにより、以下の式が自然に機能するようになります。

    In [13]: idx = pd.Index(["a1", "a2", "b1", "b2"])
    
    In [14]: s = pd.Series(range(4), index=idx)
    
    In [15]: s
    Out[15]: 
    a1    0
    a2    1
    b1    2
    b2    3
    Length: 4, dtype: int64
    
    In [16]: idx.str.startswith("a")
    Out[16]: array([ True,  True, False, False])
    
    In [17]: s[s.index.str.startswith("a")]
    Out[17]: 
    a1    0
    a2    1
    Length: 2, dtype: int64
    
  • 以下の新しいメソッドは、.strアクセサを介してアクセスでき、各値に適用されます。(GH 9766, GH 9773, GH 10031, GH 10045, GH 10052)

    メソッド

    capitalize()

    swapcase()

    normalize()

    partition()

    rpartition()

    index()

    rindex()

    translate()

  • splitは、次元を展開するかどうかを指定するためのexpandキーワードを受け入れるようになりました。return_typeは非推奨です。(GH 9847)

    In [18]: s = pd.Series(["a,b", "a,c", "b,c"])
    
    # return Series
    In [19]: s.str.split(",")
    Out[19]: 
    0    [a, b]
    1    [a, c]
    2    [b, c]
    Length: 3, dtype: object
    
    # return DataFrame
    In [20]: s.str.split(",", expand=True)
    Out[20]: 
       0  1
    0  a  b
    1  a  c
    2  b  c
    
    [3 rows x 2 columns]
    
    In [21]: idx = pd.Index(["a,b", "a,c", "b,c"])
    
    # return Index
    In [22]: idx.str.split(",")
    Out[22]: Index([['a', 'b'], ['a', 'c'], ['b', 'c']], dtype='object')
    
    # return MultiIndex
    In [23]: idx.str.split(",", expand=True)
    Out[23]: 
    MultiIndex([('a', 'b'),
                ('a', 'c'),
                ('b', 'c')],
               )
    
  • Index.strextractおよびget_dummiesメソッドを改善しました (GH 9980)。

その他の機能強化#

  • BusinessHourオフセットがサポートされるようになりました。これは、デフォルトでBusinessDayの09:00〜17:00の営業時間を表します。詳細はこちらを参照してください。(GH 7905)

    In [24]: pd.Timestamp("2014-08-01 09:00") + pd.tseries.offsets.BusinessHour()
    Out[24]: Timestamp('2014-08-01 10:00:00')
    
    In [25]: pd.Timestamp("2014-08-01 07:00") + pd.tseries.offsets.BusinessHour()
    Out[25]: Timestamp('2014-08-01 10:00:00')
    
    In [26]: pd.Timestamp("2014-08-01 16:30") + pd.tseries.offsets.BusinessHour()
    Out[26]: Timestamp('2014-08-04 09:30:00')
    
  • DataFrame.diffは、差分方向を決定するaxisパラメーターを受け入れるようになりました (GH 9727)。

  • clipclip_lower、およびclip_upperが配列のような引数をしきい値として受け入れるようになりました(これは0.11.0からの回帰です)。これらのメソッドには、SeriesまたはDataFrameがしきい値とどのように整列されるかを決定するaxisパラメーターが追加されました。(GH 6966)

  • DataFrame.mask()Series.mask()は、whereと同じキーワードをサポートするようになりました (GH 8801)。

  • drop関数は、ターゲットデータにいずれかのラベルが存在しない場合に発生するValueErrorを抑制するためにerrorsキーワードを受け入れるようになりました。(GH 6736)

    In [27]: df = pd.DataFrame(np.random.randn(3, 3), columns=["A", "B", "C"])
    
    In [28]: df.drop(["A", "X"], axis=1, errors="ignore")
    Out[28]: 
              B         C
    0 -0.706771 -1.039575
    1 -0.424972  0.567020
    2 -1.087401 -0.673690
    
    [3 rows x 2 columns]
    
  • ダッシュを使用して年と四半期を分離するサポートを追加しました。たとえば、2014-Q1などです。(GH 9688)

  • datetime64またはtimedelta64のdtypeを持つ値をastype(str)を使用して文字列に変換できるようになりました (GH 9757)。

  • get_dummies関数がsparseキーワードを受け入れるようになりました。Trueに設定すると、返されるDataFrameはスパース、例えばSparseDataFrameになります。(GH 8823)

  • Perioddatetime64を値入力として受け入れるようになりました。(GH 9054)

  • 時間定義から先行ゼロが欠落している場合、すなわち0:00:0000:00:00の場合でも、timedelta文字列変換を許可しました。(GH 9570)

  • Panel.shiftaxis='items'が使用できるようになりました (GH 9890)。

  • Excelファイルの書き込みを試みる際に、DataFrameMultiIndexを持っている場合、壊れたExcelファイルを書き込む代わりにNotImplementedErrorを発生させるようになりました。(GH 9794)

  • Categorical.add_categoriesSeriesまたはnp.arrayを受け入れるようになりました。(GH 9927)

  • str/dt/catアクセサを__dir__から動的に追加/削除します。(GH 9910)

  • normalizedtアクセサメソッドとして追加しました。(GH 10047)

  • DataFrameSeriesは、1次元高いデータのためのオーバーライド可能なコンストラクタとして_constructor_expanddimプロパティを持つようになりました。これは本当に必要な場合にのみ使用すべきです。詳細はこちらを参照してください。

  • pd.lib.infer_dtypeは、Python 3で適切な場合に'bytes'を返すようになりました。(GH 10032)

APIの変更点#

  • df.plot( ..., ax=ax)にaxを渡す場合、sharex kwargはデフォルトでFalseになります。これにより、xラベルとx目盛ラベルの表示は変更されなくなります。これは、図の適切な軸に対して自分で設定するか、明示的にsharex=Trueを設定する必要があります(ただし、これは渡された軸だけでなく、図内のすべての軸の表示を変更します!)。pandasがサブプロット自体を作成する場合(例えば、ax kwargが渡されない場合)、デフォルトは依然としてsharex=Trueであり、表示変更が適用されます。

  • assign()は新しい列をアルファベット順に挿入するようになりました。以前は順序は任意でした。(GH 9777)

  • デフォルトでは、read_csvread_tableはファイル拡張子に基づいて圧縮タイプを推測しようとします。compression=Noneを設定すると、以前の動作(解凍なし)に戻ります。(GH 9770)

非推奨#

  • Series.str.splitreturn_typeキーワードは、expandの採用により削除されました (GH 9847)。

インデックスの表現#

Indexとそのサブクラスの文字列表現が統一されました。値が少ない場合は単一行で表示され、値が多い場合(ただしdisplay.max_seq_itemsより少ない場合)は複数行で折り返して表示されます。項目が多数ある場合(display.max_seq_itemsを超える場合)は、切り詰められた表示(データの先頭と末尾)が示されます。MultiIndexのフォーマットは変更されていません(複数行で折り返された表示)。表示幅はオプションdisplay.max_seq_items(デフォルトは100)に応答します。(GH 6482)

以前の動作

In [2]: pd.Index(range(4), name='foo')
Out[2]: Int64Index([0, 1, 2, 3], dtype='int64')

In [3]: pd.Index(range(104), name='foo')
Out[3]: Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...], dtype='int64')

In [4]: pd.date_range('20130101', periods=4, name='foo', tz='US/Eastern')
Out[4]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-01-01 00:00:00-05:00, ..., 2013-01-04 00:00:00-05:00]
Length: 4, Freq: D, Timezone: US/Eastern

In [5]: pd.date_range('20130101', periods=104, name='foo', tz='US/Eastern')
Out[5]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-01-01 00:00:00-05:00, ..., 2013-04-14 00:00:00-04:00]
Length: 104, Freq: D, Timezone: US/Eastern

新しい動作

In [29]: pd.set_option("display.width", 80)

In [30]: pd.Index(range(4), name="foo")
Out[30]: RangeIndex(start=0, stop=4, step=1, name='foo')

In [31]: pd.Index(range(30), name="foo")
Out[31]: RangeIndex(start=0, stop=30, step=1, name='foo')

In [32]: pd.Index(range(104), name="foo")
Out[32]: RangeIndex(start=0, stop=104, step=1, name='foo')

In [33]: pd.CategoricalIndex(["a", "bb", "ccc", "dddd"], ordered=True, name="foobar")
Out[33]: CategoricalIndex(['a', 'bb', 'ccc', 'dddd'], categories=['a', 'bb', 'ccc', 'dddd'], ordered=True, dtype='category', name='foobar')

In [34]: pd.CategoricalIndex(["a", "bb", "ccc", "dddd"] * 10, ordered=True, name="foobar")
Out[34]: 
CategoricalIndex(['a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a',
                  'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a', 'bb',
                  'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc',
                  'dddd', 'a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd',
                  'a', 'bb', 'ccc', 'dddd'],
                 categories=['a', 'bb', 'ccc', 'dddd'], ordered=True, dtype='category', name='foobar')

In [35]: pd.CategoricalIndex(["a", "bb", "ccc", "dddd"] * 100, ordered=True, name="foobar")
Out[35]: 
CategoricalIndex(['a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a',
                  'bb',
                  ...
                  'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc',
                  'dddd'],
                 categories=['a', 'bb', 'ccc', 'dddd'], ordered=True, dtype='category', name='foobar', length=400)

In [36]: pd.date_range("20130101", periods=4, name="foo", tz="US/Eastern")
Out[36]: 
DatetimeIndex(['2013-01-01 00:00:00-05:00', '2013-01-02 00:00:00-05:00',
               '2013-01-03 00:00:00-05:00', '2013-01-04 00:00:00-05:00'],
              dtype='datetime64[ns, US/Eastern]', name='foo', freq='D')

In [37]: pd.date_range("20130101", periods=25, freq="D")
Out[37]: 
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
               '2013-01-05', '2013-01-06', '2013-01-07', '2013-01-08',
               '2013-01-09', '2013-01-10', '2013-01-11', '2013-01-12',
               '2013-01-13', '2013-01-14', '2013-01-15', '2013-01-16',
               '2013-01-17', '2013-01-18', '2013-01-19', '2013-01-20',
               '2013-01-21', '2013-01-22', '2013-01-23', '2013-01-24',
               '2013-01-25'],
              dtype='datetime64[ns]', freq='D')

In [38]: pd.date_range("20130101", periods=104, name="foo", tz="US/Eastern")
Out[38]: 
DatetimeIndex(['2013-01-01 00:00:00-05:00', '2013-01-02 00:00:00-05:00',
               '2013-01-03 00:00:00-05:00', '2013-01-04 00:00:00-05:00',
               '2013-01-05 00:00:00-05:00', '2013-01-06 00:00:00-05:00',
               '2013-01-07 00:00:00-05:00', '2013-01-08 00:00:00-05:00',
               '2013-01-09 00:00:00-05:00', '2013-01-10 00:00:00-05:00',
               ...
               '2013-04-05 00:00:00-04:00', '2013-04-06 00:00:00-04:00',
               '2013-04-07 00:00:00-04:00', '2013-04-08 00:00:00-04:00',
               '2013-04-09 00:00:00-04:00', '2013-04-10 00:00:00-04:00',
               '2013-04-11 00:00:00-04:00', '2013-04-12 00:00:00-04:00',
               '2013-04-13 00:00:00-04:00', '2013-04-14 00:00:00-04:00'],
              dtype='datetime64[ns, US/Eastern]', name='foo', length=104, freq='D')

パフォーマンス改善#

  • 日付時刻を含む混合dtypeのcsv書き込みパフォーマンスが最大5倍改善されました (GH 9940)。

  • csv書き込みパフォーマンスが全体的に2倍改善されました (GH 9940)。

  • pd.lib.max_len_string_arrayのパフォーマンスを5〜7倍改善しました (GH 10024)。

バグ修正#

  • DataFrame.plot()の凡例にラベルが適切に表示されないバグ、label=引数を渡すと機能し、Seriesのインデックスは変更されなくなりました。(GH 9542)

  • フレームの長さがゼロの場合にセグメンテーション違反を引き起こすJSONシリアル化のバグを修正しました。(GH 9805)

  • read_csvで末尾の区切り文字がない場合にセグメンテーション違反を引き起こすバグを修正しました。(GH 5664)

  • インデックス名を保持したまま追加する際のバグ (GH 9862)

  • scatter_matrixが予期しない軸目盛ラベルを描画するバグ (GH 5662)

  • StataWriterのバグを修正しました。これにより、保存時に入力DataFrameが変更されていました (GH 9795)。

  • nullエントリが存在し、高速アグリゲーターが使用されている場合に、transformで長さの不一致を引き起こすバグ (GH 9697)

  • ブロックの順序が異なる場合にequalsが誤った陰性結果を引き起こすバグ (GH 9330)

  • 複数のpd.Grouperでグループ化し、そのうちの1つが時間ベースでない場合のバグ (GH 10063)

  • タイムゾーンを持つPostgreSQLテーブルを読み込む際にread_sql_tableでエラーが発生するバグ (GH 7139)

  • DataFrameのスライスでメタデータが保持されない可能性があるバグ (GH 9776)

  • TimdeltaIndexが固定HDFStoreで適切にシリアル化されないバグ (GH 9635)。

  • TimedeltaIndexコンストラクタが、別のTimedeltaIndexがデータとして与えられた場合にnameを無視するバグ (GH 10025)。

  • DataFrameFormatter._get_formatted_indexmax_colwidthDataFrameインデックスに適用しないバグ (GH 7856)。

  • 読み取り専用ndarrayデータソースで.locを使用する際のバグ (GH 10043)。

  • groupby.apply()のバグで、渡されたユーザー定義関数がNoneのみを返す場合(すべての入力に対して)、エラーが発生する可能性がありました。(GH 9685)

  • pytablesのテストでは常に一時ファイルを使用する (GH 9992)

  • secondary_yを使用して連続的にプロットする場合、凡例が適切に表示されない可能性があるバグ (GH 9610, GH 9779)。

  • DataFrame.plot(kind="hist")のバグで、DataFrameに非数値列が含まれている場合にTypeErrorが発生する (GH 9853)

  • DatetimeIndexを持つDataFrameのプロットを繰り返すとTypeErrorが発生する可能性があるバグ (GH 9852)

  • 互換性のないCythonバージョンでのビルドを許可するsetup.pyのバグ (GH 9827)

  • secondary_yのプロットでright_axプロパティが再帰的に指定され、誤ってセカンダリ軸にアタッチされるバグ (GH 9861)

  • DatetimeまたはTimedelta型の空のSeriesに対するSeries.quantileのバグ (GH 9675)

  • アップキャストが必要な場合にwhereが誤った結果を引き起こすバグ (GH 9731)

  • FloatArrayFormatterのバグで、特定のdisplay.precisionに対して、小数形式で「小さい」浮動小数点数を表示するための決定境界が1桁ずれていました。(GH 9764)

  • DataFrame.plot()colorstyleキーワードの両方が渡され、スタイル文字列に色記号がない場合にエラーが発生するバグを修正しました (GH 9671)。

  • リストライクなオブジェクトをIndexと結合する際のDeprecationWarningを表示しないようにしました (GH 10083)。

  • read_csvread_tableで、空白行がある場合にskip_rowsパラメータを使用すると発生するバグ (GH 9832)。

  • read_csv()index_col=True1と解釈するバグ (GH 9798)

  • ==を使用したインデックス等価比較がIndex/MultiIndex型不適合で失敗するバグ (GH 9785)

  • SparseDataFrameが列名としてnanを受け入れないバグ (GH 8822)。

  • to_msgpackread_msgpackのzlibとblosc圧縮サポートのバグ (GH 9783)。

  • TimeGrouperでグループ化した場合、GroupBy.sizeがインデックス名を適切にアタッチしないバグ (GH 9925)。

  • length_of_indexerが誤った結果を返すため、スライス代入で例外が発生するバグ (GH 9995)

  • 初期の空白と1つの非空白文字を含む行がスキップされるcsvパーサーのバグ (GH 9710)。

  • Cのcsvパーサーで、データが改行に続いて空白で始まる場合に偽のNaNsが発生するバグ (GH 10022)。

  • Categoricalでグループ化する際に、nullグループを持つ要素が最終グループに漏れるバグ (GH 9603)

  • 空のデータフレームで.ilocと.locの動作が一貫しないバグ (GH 9964)

  • TimedeltaIndexへの無効な属性アクセスが、AttributeErrorの代わりに誤ってValueErrorを発生させるバグ (GH 9680)。

  • カテゴリカルデータと、カテゴリに含まれていないスカラーとの不等比較のバグ(例:Series(Categorical(list("abc"), ordered=True)) > "d")。これはすべての要素に対してFalseを返していましたが、現在はTypeErrorを発生させます。等価比較も==に対してFalse!=に対してTrueを返すようになりました。(GH 9848)

  • 右辺が辞書である場合のDataFrame __setitem__のバグ (GH 9874)

  • whereでdtypeがdatetime64/timedelta64であるが、他のdtypeが異なる場合のバグ (GH 9804)。

  • MultiIndex.sortlevel()のバグで、Unicodeレベル名が壊れる (GH 9856)。

  • groupby.transformが誤って出力dtypeを入力dtypeと一致するように強制していたバグ (GH 9807)。

  • columnsパラメータが設定され、dataが空のリストである場合のDataFrameコンストラクタのバグ (GH 9939)。

  • log=Trueが設定された棒グラフで、すべての値が1未満の場合にTypeErrorが発生するバグ (GH 9905)。

  • 横棒グラフがlog=Trueを無視するバグ (GH 9905)

  • PyTablesクエリでインデックスを使用しても正しい結果が返されないバグ (GH 8265, GH 9676)。

  • Decimal型の値を含むデータフレームを別のDecimalで割るとエラーが発生するバグ (GH 9787)。

  • DataFrameのasfreqを使用すると、インデックスの名前が削除されるバグを修正しました。(GH 9885)

  • リサンプルBM/BQ時に余分なインデックスポイントが発生するバグ (GH 9756)。

  • AbstractHolidayCalendarのキャッシュをクラスレベルではなくインスタンスレベルに変更しました。後者は予期しない動作につながる可能性があるためです。(GH 9552)

  • MultiIndexedデータフレームのLaTeX出力を修正しました (GH 9778)。

  • DataFrame.locを使用して空の範囲を設定すると例外が発生するバグ (GH 9596)

  • 既存の軸グリッドに新しいプロットを追加する際に、サブプロットと共有軸で目盛ラベルが隠されるバグ (GH 9158)

  • カテゴリ変数でグループ化する際のtransformfilterのバグ (GH 9921)

  • グループの数とdtypeが入力インデックスと同じである場合のtransformのバグ (GH 9700)。

  • Google BigQueryコネクタは、メソッドごとに依存関係をインポートするようになりました。(GH 9713)

  • BigQueryコネクタが非推奨のoauth2client.tools.run()を使用しないように更新されました (GH 8327)。

  • サブクラス化されたDataFrameのバグ。スライスまたはサブセット化する際に、正しいクラスを返さない可能性があります。(GH 9632)

  • 非浮動小数点型null値が正しく処理されない.median()のバグ (GH 10040)。

  • 数値に変換可能な文字列が与えられた場合にSeries.fillna()が例外を発生させるバグ (GH 10092)

貢献者#

今回のリリースには合計58名がパッチを貢献しました。名前に「+」が付いている方は、今回初めてパッチを貢献されました。

  • Alfonso MHC +

  • アンディ・ヘイデン

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

  • Chris Gilmer +

  • Chris Grinolds +

  • Dan Birken

  • David BROCHART +

  • David Hirschfeld +

  • David Stephens

  • Dr. Leo +

  • Evan Wright +

  • Frans van Dunné +

  • Hatem Nassrat +

  • Henning Sperr +

  • Hugo Herter +

  • ヤン・シュルツ

  • Jeff Blackburne +

  • ジェフ・リーバック

  • Jim Crist +

  • Jonas Abernot +

  • Joris Van den Bossche

  • カービー・シェデン

  • Leo Razoumov +

  • Manuel Riel +

  • モルタダ・メヒヤル

  • Nick Burns +

  • Nick Eubank +

  • Olivier Grisel

  • Phillip Cloud

  • ピエトロ・バティストン

  • Roy Hyunjin Han

  • Sam Zhang +

  • Scott Sanderson +

  • Sinhrks +

  • ステファン・ホイヤー

  • Tiago Antao

  • Tom Ajamian +

  • Tom Augspurger

  • Tomaz Berisa +

  • Vikram Shirgur +

  • Vladimir Filimonov

  • William Hogman +

  • Yasin A +

  • Younggun Kim +

  • behzad nouri

  • dsm054

  • floydsoft +

  • flying-sheep +

  • gfr +

  • jnmclarty

  • jreback

  • ksanghai +

  • lucas +

  • mschmohl +

  • ptype +

  • ロックg

  • scls19fr +

  • sinhrks