主要内容

在 MATLAB 中使用 Python Pandas DataFrame

自 R2024a 开始

Pandas 是一个核心 Python 库,可用于在 Python 中处理表格数据。Pandas 库定义一个名为 DataFrame 的类。

此示例说明如何在 MATLAB 中使用 pandas DataFrame (py.pandas.DataFrame)。

  • 您可以使用 table 函数将 pandas DataFrame 转换为 MATLAB 表。您也可以使用 timetable 函数将 pandas DataFrame 转换为 MATLAB 时间表。

  • 您可以使用 py.pandas.DataFrame 函数将 MATLAB 表或时间表转换为 pandas DataFrame。您也可以将 MATLAB 表或时间表直接传递给 Python 函数,而无需先将它们转换为 pandas DataFrame。

将 Pandas DataFrame 转换为 MATLAB 表

使用 table 函数将 pandas DataFrame 转换为 MATLAB 表。

例如,创建一个 pandas DataFrame 并将其转换为 MATLAB 表。在这种情况下,MATLAB 将 pandas Series 转换为 MATLAB 字符串并将 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"    84       63  
    "Johnson"    63       71  
    "Zhang"      36       64  
    "Diaz"       70       74  
    "Brown"      74       72  

将 Pandas DataFrame 转换为 MATLAB 时间表

如果您有包含带时间戳的值的 pandas DataFrame,您可以使用 timetable 函数将其转换为 MATLAB 时间表:

  • 如果 pandas DataFrame 的索引具有时间值(类型为 datetime64timedelta64TimestampTimedelta),则这些值用于设置 MATLAB 时间表的行时间。

  • 如果索引没有时间值,则行时间来自 pandas DataFrame 的第一个具有时间值(类型为 datetime64timedelta64TimestampTimedelta)的列。

例如,创建一个 pandas DataFrame 并将其转换为 MATLAB 时间表。在这种情况下,MATLAB 将 Python 日期时间值转换为 MATLAB 日期时间值。

date_today = py.datetime.datetime.now();
mtimes = py.pandas.date_range(date_today,periods=int8(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
    ____________________    ____    ________    _________

    31-Dec-2024 17:00:29    37.3       30         13.4   
    31-Dec-2024 17:00:30    39.1       31          6.5   
    31-Dec-2024 17:00:31    42.3       29          7.3   

将 MATLAB 表转换为 Pandas DataFrame

MATLAB 将传递给 Python 函数的任何 MATLAB 表隐式转换为 pandas DataFrame。但是,如果您有 MATLAB 表,您可以使用 py.pandas.DataFrame 显式将其转换为 pandas DataFrame。

例如,创建一个 MATLAB 表并将其转换为 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

您也可以将 MATLAB 表直接传递给 Python 函数,而无需先将它们转换为 pandas DataFrame。例如,使用 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 时间表转换为 Pandas DataFrame

您可以使用 py.pandas.DataFrame 将 MATLAB 时间表转换为 pandas DataFrame。

例如,创建一个 MATLAB 时间表并将其转换为 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 表或时间表的数据类型转换

当您将 pandas DataFrame 转换为 MATLAB 表或时间表时,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. 类型

py.NaN

NaN

py.NaT

NaT

pd.NaN

<缺失>

从 MATLAB 表或时间表到 Pandas DataFrame 的数据类型转换

当您使用 MATLAB 表调用 Python 函数或将 MATLAB 表或时间表显式转换为 pandas DataFrame 时,MATLAB 自动将表数据转换为最能表示 pandas 语言中数据的类型。在下表中,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

另请参阅

|

主题