在 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 的索引具有时间值(类型为
datetime64、timedelta64、Timestamp或Timedelta),则这些值用于设置 MATLAB 时间表的行时间。如果索引没有时间值,则行时间来自 pandas DataFrame 的第一个具有时间值(类型为
datetime64、timedelta64、Timestamp或Timedelta)的列。
例如,创建一个 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 中转换的数据类型 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
其他类型 | Python 对象 |
|
|
|
|
| <缺失> |
从 MATLAB 表或时间表到 Pandas DataFrame 的数据类型转换
当您使用 MATLAB 表调用 Python 函数或将 MATLAB 表或时间表显式转换为 pandas DataFrame 时,MATLAB 自动将表数据转换为最能表示 pandas 语言中数据的类型。在下表中,py. 指内置 Python 数据类型,np. 指 NumPy,pd. 指 pandas。
MATLAB 数据类型 | 在 Pandas 中转换的数据类型 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<缺失> |
|
<未定义> ( |
|