【Python Fennel Beanシリーズ】PANDASでカラムの型を変更する

Python でプログラミングする場合、同じ目的を達成するためにさまざまな方法を使用すると興味深い場合があります。魯迅作品の孔毅を思い出します。Kong Yiji は、ウイキョウ豆を表すフェンネルという単語の 4 つの書き方について多くの研究を行いました。私自身を Kong Yiji と比較するつもりはありません。そこで、すべてのプログラマーが楽しめるように、ここで Python フェンネル豆をいくつか集めます。

まずはテスト用のDataFrameを生成する関数を準備します。この DataFrame には、a、b、c という名前の 3 つの列があります。

>>> import numpy as np
>>> import pandas as pd

フェンネルビーン 1: to_numeric()

この関数は、スカラー、リスト、タプル、1 次元配列、または Series 型データを数値型データに変換できます。デフォルトでは、 orタイプは
入力パラメータに基づいて返されますfloat64int64

シーケンスを数値に変換する場合、シーケンス内のデータのデータ型が一致している必要はありません。

>>> s = pd.Series(["1", 2, "3"])
>>> pd.to_numeric(s)
0    1
1    2
2    3
dtype: int64

3 つの列を持つサンプル DataFrame を生成する

>>> df = pd.DataFrame({
    
    
...     'a':['1','2','3'],
...     'b':[4,'5.0',6],
...     'c':['7',8,9]})
>>> df.dtypes
a    object
b    object
c    object
dtype: object

すべての列を変換する

>>> df.apply(pd.to_numeric).dtypes
a      int64
b    float64
c      int64
dtype: object

列 a と b のみを変換します

>>> df[["a", "b"]] = df[["a", "b"]].apply(pd.to_numeric)
>>> df.dtypes
a      int64
b    float64
c     object
dtype: object

to_numeric関数のプロトタイプは ですto_numeric(arg, errors='raise', downcast=None)errors型変換におけるエラー処理を制御できます。詳細についてはドキュメントを参照してください。
同様のタイプの関数にはto_datetime()、 と がありますto_timedelta()

フェンネルビーン 2: astype()

Dataframe と Series のインスタンスには両方とも、型変換に使用できる astype メソッドがあります。

>>> s = pd.Series(["1", 2, "3"])
>>>s.astype(int)
0    1
1    2
2    3
dtype: int64

>>> df = pd.DataFrame({
    
    
...     'a':['1','2','3'],
...     'b':[4,'5.0',6],
...     'c':['7',8,9]})
>>> df.astype('int32', errors='ignore').dtypes
a    object
b    object
c    object
dtype: object

>>> df.astype({
    
    'a': 'int32'}).dtypes
a     int32
b    object
c    object
dtype: object

astypeメソッドは定義されていますastype(dtype, copy: bool = True, errors: str = 'raise')。詳細についてはドキュメントを参照してください。

フェンネルビーンズ 3: infer_objects()

このメソッドの機能は、オブジェクト型列をより適切な型に変換することです。バージョン 0.21.0 で追加されました。例:

>>> df = pd.DataFrame({
    
    "A": ["a", 1, 2, 3],
...                    "B": ["a", 1, 2.0, 3]})
>>> df.dtypes
A    object
B    object
dtype: object

>>> df = df.iloc[1:]
>>> df.infer_objects().dtypes
A      int64
B    float64
dtype: object

フェンネルビーン IV:convert_dtypes()

このメソッドの目的は、列のデータ型をより適切な型に変換することです。バージョン 1.0.0 で追加されました。公式の例:

>>> df = pd.DataFrame(
...     {
    
    
...         "a": pd.Series([1, 2, 3], dtype=np.dtype("int32")),
...         "b": pd.Series(["x", "y", "z"], dtype=np.dtype("O")),
...         "c": pd.Series([True, False, np.nan], dtype=np.dtype("O")),
...         "d": pd.Series(["h", "i", np.nan], dtype=np.dtype("O")),
...         "e": pd.Series([10, np.nan, 20], dtype=np.dtype("float")),
...         "f": pd.Series([np.nan, 100.5, 200], dtype=np.dtype("float")),
...     }
... )

>>> df
   a  b      c    d     e      f
0  1  x   True    h  10.0    NaN
1  2  y  False    i   NaN  100.5
2  3  z    NaN  NaN  20.0  200.0

新しい DataFrame を作成します。デフォルトの dtype は次のとおりです。

>>> df.dtypes
a      int32
b     object
c     object
d     object
e    float64
f    float64
dtype: object

型を最適解に変換します。

>>> dfn = df.convert_dtypes()
>>> dfn
   a  b      c     d     e      f
0  1  x   True     h    10    NaN
1  2  y  False     i  <NA>  100.5
2  3  z   <NA>  <NA>    20  200.0

>>> dfn.dtypes
a      Int32
b     string
c    boolean
d     string
e      Int64
f    float64
dtype: object

文字列で構成される新しいシリーズを作成します。欠落したデータはnp.nanで表されます。

>>> s = pd.Series(["a", "b", np.nan])
>>> s
0      a
1      b
2    NaN
dtype: object

dtype を使用してシリーズを取得しますStringDtype

>>> s.convert_dtypes()
0       a
1       b
2    <NA>
dtype: string

おすすめ

転載: blog.csdn.net/mouse2018/article/details/115240616