2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pandas 1.1.0 および1.0.0の主な追加機能

Last updated at Posted at 2020-08-03

#この記事について
pandasは2020年7月28にバージョン1.0から1.1.0にアップデートされました。この記事で1.1.0の主な追加機能と、N番煎じではありますが、2020年1月の0.25.3から1.0.0へアップデートにおける主な追加機能についてまとめています。
2020年12月26日にバージョン1.2にアップデートされたので、追記をしました。

公式の情報は

を参照ください。

検証環境

バージョン1.0は1.0.5、1.1は1.0.0、1.2は1.2.0で検証しています。0.25は0.25.1で検証しています。

1.0

pd.NA

0.25まではmissing valueを表すのに、floatなら np.nan、object(文字列)ならば np.nan or None、時刻データならば pd.NaT、と様々な値が使われていた。

1.0でmissing valuesを表すのにpd.NAが導入された。

例えば、

pd.Series([1, 2, None], dtype="Int64")

の3要素目はバージョン0.25ではnp.nanだったのが、1.0ではpd.NAとなる。

0.25まではmissing(np.nan)が存在する数値カラムは強制的にfloat64になってしまっていたが、1.0ではpd.NAが存在するInt8型のカラムというのも可能。

string(StringDtype)型

stringデータのSeries(DataFrameのカラム)を表す型 string(StringDtype)型が追加された。文字列のSeries(or カラム)を扱うときはstring型の使用を推奨とのこと。

0.25まではstringデータを含むSeries(or カラム)を表すのはobject型だったため、

pd.Series(['abc', True, 'def'], dtype="object")

(文字とbooleanの混合)が許されてしまう表現しかできなかったが、

1.0からは

pd.Series(['abc', 'def'], dtype="string")

とすれば、そのSeries(or カラム)は文字列だけ許されることになる。

pd.Series(['abc', True, 'def'], dtype="string")

はエラー。

pd.Series(['abc', 'def', None], dtype="string")

の3要素目はpd.NA

ただし

pd.Series(['abc', True, 'def'])

(dtypeの指定なし)は従来通りobject型で、この表現も許容される。

boolean(booleanDtype)型

booleanデータを表す型 boolean(booleanDtype)型が追加された。boolean(TrueまたはFalse)のSeries(or カラム)を扱うときはboolean型の使用を推奨。

pd.Series([True, False, 0], dtype="booleal")

はエラー。(dtypeの指定が無しならば、エラーなく許容。`dtype="bool" ならば0はFalseに変換される)

missing valueの取扱については、

pd.Series([True, False, np.nan])
pd.Series([True, False, None])

の3要素目はそれぞれnp.nan、Noneだが

pd.Series([True, False, np.nan], dtype="boolean")
pd.Series([True, False, None], dtype="boolean")

とすると、3要素目はいずれもpd.NAとなる。

pd.Series([True, False, np.nan], dtype="bool")
pd.Series([True, False, None], dtype="bool")

の場合は、3要素目はそれぞれTrue、Falseになる。

convert_dtypes関数

df = pd.DataFrame({'x': ['abc', None, 'def'],
                   'y': [1, 2, np.nan],
                   'z': [True, False, True]})

はx列:object、y列:float64、z列:bool となる。せっかくstring型、boolean型ができたのに...

そこで、

df.convert_dtypes()

で、x列:string、y列:Int64、z列:boolean と変換される。Noneやnp.nanもこれでpd.NAとなる。

以上NAと型についての機能ははexperimentalな機能なため、変更の可能性があります。

ignore_index 引数

DataFrame.sort_values()DataFrame.drop_duplicates() にignore_index引数が追加された。ignore_index=Trueでソート後などのindexが0から順に振り直される。pandasのindexうざい派には朗報。

1.1

dtype="string", astype("string")

pd.Series([1, "abc", np.nan], dtype="string")
pd.Series([1, 2, np.nan], dtype="Int64").astype("string")

ですべての要素が文字列に。1.0までは要素がすべて文字列かnanじゃないとエラー。

groupby

df = pd.DataFrame([[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]], columns=["a", "b", "c"])

df.groupby(by=["b"], dropna=False).sum()

の結果が

     a  c
b        
1.0  2  3
2.0  2  5
NaN  1  4

のようになり、byで指定したカラムの値がNAの行ついても集計される。Rのdplyrのgroup_byと同じような挙動。

dropna=True、もしくは指定なしの場合は、byで指定したカラムの値がNAの行は集計されない。

1.2

インデックスやカラム名の重複を許可しない属性の追加、to_csvにバイナリオブジェクトへの出力機能の追加などありますが、あまり使わなそうな内容が多いという印象です。
使いそうなのが、1.0で追加されたboolean型やstring形やInt64のFloat版の追加でした。ただし、Experimentalです。

pd.Series([1, 2, None])

の3要素目はnp.nanですが、

pd.Series([1, 2, None], dtype="Float64")

のとすると、3要素目はpd.NAとなります。また、

pd.Series([1, 2, "a"])
pd.Series([1, 2, "a"], dtype="Float64")

の前者はobject型となりますが、後者は許されません(エラー)。

比較演算に関して、

pd.Series([1, 2, None]) > 1

の出力は

0    False
1     True
2    False
dtype: bool

となりますが、

pd.Series([1, 2, None], dtype="Float64") > 1

の出力は

0    False
1     True
2     <NA>
dtype: boolean

となります。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?