Main Content

MATLAB での Python pandas DataFrame の使用

R2024a 以降

pandas は、Python で表形式のデータを処理するのに役立つコア Python ライブラリです。pandas ライブラリは DataFrame というクラスを定義します。

この例では、MATLAB で pandas DataFrame (py.pandas.DataFrame) を使用する方法を示します。

  • table 関数を使用して、pandas DataFrame を MATLAB table に変換できます。また、timetable 関数を使用して、pandas DataFrame を MATLAB timetable に変換することもできます。

  • py.pandas.DataFrame 関数を使用して、MATLAB table または timetable を pandas DataFrame に変換できます。先に pandas DataFrame に変換することなく、MATLAB table または timetable を Python 関数に直接渡すこともできます。

pandas DataFrame から MATLAB table への変換

table 関数を使用して、pandas DataFrame を MATLAB table に変換します。

たとえば、pandas DataFrame を作成し、それを MATLAB table に変換します。この場合、MATLAB は pandas Series を MATLAB string に変換し、Python 整数値を MATLAB 整数値に変換します。

last_names = py.pandas.Series({"Sanchez","Johnson","Zhang","Diaz","Brown"},dtype="object");
age = py.numpy.random.randint(18,high=85,size=py.len(last_names));
height = py.numpy.random.randint(60,high=78,size=py.len(last_names));

pd = py.pandas.DataFrame(struct("LastName",last_names,"Age",age,"Height",height));
md = table(pd)
md=5×3 table
    LastName     Age    Height
    _________    ___    ______

    "Sanchez"    57       69  
    "Johnson"    25       67  
    "Zhang"      34       67  
    "Diaz"       63       68  
    "Brown"      71       76  

pandas DataFrame から MATLAB timetable への変換

タイムスタンプ付きの値を含む pandas DataFrame がある場合は、timetable 関数を使用してそれを MATLAB timetable に変換できます。

  • pandas DataFrame のインデックスに時間値 (datetime64timedelta64Timestamp、または Timedelta) 型) がある場合、それらの値は MATLAB timetable の行時間を設定するために使用されます。

  • インデックスに時間値がない場合、行時間は時間値 (datetime64timedelta64Timestamp、または Timedelta 型) をもつ pandas DataFrame の最初の列から取得されます。

たとえば、pandas DataFrame を作成し、それを MATLAB timetable に変換します。この場合、MATLAB は Python datetime 値を MATLAB datetime 値に変換します。

date_today = py.datetime.datetime.now();
mtimes = py.pandas.date_range(date_today,periods=3,freq='S');
temp = py.list({double(37.3),double(39.1),double(42.3)});
pressure = py.list({int32(30.10),int32(30.56),int32(28.90)});
wspeed = py.list({single(13.4),single(6.5),single(7.3)});

ptt = py.pandas.DataFrame(struct("MeasurementTime",mtimes, ...
    "Temp",temp,"Pressure",pressure,"WindSpeed",wspeed));

mtt = timetable(ptt)
mtt=3×3 timetable
      MeasurementTime       Temp    Pressure    WindSpeed
    ____________________    ____    ________    _________

    05-Feb-2024 13:35:59    37.3       30         13.4   
    05-Feb-2024 13:36:00    39.1       31          6.5   
    05-Feb-2024 13:36:01    42.3       29          7.3   

MATLAB table から pandas DataFrame への変換

MATLAB は、Python 関数に渡された MATLAB table を pandas DataFrame に暗黙的に変換します。ただし、MATLAB table がある場合は、py.pandas.DataFrame を使用してそれを pandas DataFrame に明示的に変換できます。

たとえば、MATLAB table を作成し、それを pandas DataFrame に変換します。

dish_name = ["omelette";"soup";"salad";"fries";"cookie"];
price = [8.50;5.00;7.25;1.50;2.00];
sold_out = [true;false;true;false;true];

md = table(dish_name,price,sold_out);
pd = py.pandas.DataFrame(md);
py.print(pd)
  dish_name  price  sold_out
0  omelette   8.50      True
1      soup   5.00     False
2     salad   7.25      True
3     fries   1.50     False
4    cookie   2.00      True

先に pandas DataFrame に変換することなく、MATLAB table を Python 関数に直接渡すこともできます。たとえば、py.len を使用して md の長さを求めます。

l = py.len(md)
l = 
  Python int with properties:

    denominator: [1×1 py.int]
           imag: [1×1 py.int]
      numerator: [1×1 py.int]
           real: [1×1 py.int]

    5

MATLAB timetable から pandas DataFrame への変換

py.pandas.DataFrame を使用して、MATLAB timetable を pandas DataFrame に変換できます。

たとえば、MATLAB timetable を作成し、それを pandas DataFrame に変換します。

mtt = timetable(datetime(["2023-12-18";"2023-12-19";"2023-12-20"]), ...
               [37.3;39.1;42.3],[30.1;30.03;29.9],[13.4;6.5;7.3]);
mtt.Properties.VariableNames = ["Temp","Pressure","WindSpeed"];
ptt = py.pandas.DataFrame(mtt);
py.print(ptt)
            Temp  Pressure  WindSpeed
Time                                 
2023-12-18  37.3     30.10       13.4
2023-12-19  39.1     30.03        6.5
2023-12-20  42.3     29.90        7.3

pandas DataFrame から MATLAB table または timetable へのデータ型変換

pandas DataFrame を MATLAB table または timetable に変換すると、MATLAB はそれらの pandas データ型を MATLAB 型に自動的に変換します。次の表では、py. は組み込み Python データ型を指し、np. は NumPy を指し、pd. は pandas を指しています。

pandas データ型

MATLAB での変換後のデータ型

np.uint8

pd.UInt8

uint8

np.uint16

pd.UInt16

uint16

np.uint32

pd.UInt32

uint32

np.uint64

pd.UInt64

uint64

np.int8

pd.Int8

int8

np.int16

pd.Int16

int16

np.int32

pd.Int32

int32

np.int64

pd.Int64

int64

np.float32

pd.Float32

single

np.float64

pd.Float64

double

py.bool

logical

pd.Categorical

categorical

np.datetime64

pd.Timestamp

datetime

np.timedelta64

pd.Timedelta

duration

np.complex64

complex (single)

np.complex128

complex (double)

py.str

pd.StringDtype

string

py.tuple

cell

py.dict

struct

その他の型

Python オブジェクト — py.type

py.NaN

NaN

py.NaT

NaT

pd.NaN

<なし>

MATLAB table または timetable から pandas DataFrame へのデータ型変換

MATLAB table を指定して Python 関数を呼び出すか、MATLAB table または timetable を pandas DataFrame に明示的に変換すると、MATLAB は pandas 言語でデータを最もよく表す型に table データを自動的に変換します。次の表では、py. は組み込み Python データ型を指し、np. は NumPy を指し、pd. は pandas を指しています。

MATLAB データ型

pandas での変換後のデータ型

uint8

np.uint8

uint16

np.uint16

uint32

np.uint32

uint64

np.uint64

int8

np.int8

int16

np.int16

int32

np.int32

int64

np.int64

single

np.float32

double

np.float64

logical

py.bool

categorical

pd.Categorical

datetime

np.datetime64

duration

np.timedelta64

complex (single)

np.complex64

complex (double)

np.complex128

string

cellstr

np.object

cell

py.tuple

dictionary

struct

py.dict

NaN

py.NaN

NaT

py.NaT

<なし>

pd.NaN

<未定義> (categorical)

pd.NaN

参考

|

関連するトピック