在MATLAB中创建表

处理表和DataFrame之前需要先创建它们,可以用直接法、分步法、类型转换法和文件导入法等方法创建它们。[大谦MATLAB,dqmatlab点com]

直接创建表

使用MATLAB中的table函数可以直接创建表,使用Python中pandas包的DataFrame函数可以直接创建DataFrame。

根据工作区变量创建表,首先创建具有相同行数的工作区变量,然后用table函数创建表。

code.matlab
>> ID={'1';'2';'3';'4'};
>> Name={'张三';'李四';'杨二';'王五'};
>> Age=[18;19;17;21];
>> Height=[162;169;164;167];
>> Weight=[116;103;131;133];

用table函数生成表,用'RowNames'参数指定表的索引列为ID。

code.matlab
>> T=table(Name,Age,Height,Weight, 'RowNames',ID)
T =
  4×4 table
            Name      Age    Height    Weight
          ________    ___    ______    ______
    1     {'张三'}    18      162       116
    2     {'李四'}    19      169       103
    3     {'杨二'}    17      164       131
    4     {'王五'}    21      167       133

本方法先创建表的内容,然后用'VariableNames'参数指定表的列名。

code.matlab
>> T=table({'张三';'李四';'杨二';'王五'},{'M';'F';'M';'F'},[18;19;17;25],...
    [162;169;164;167],...
    'VariableNames',{'Name' 'Gender' 'Age' 'Height'})
T=
    Name    Gender    Age    Height
    ____    ______    ___    ______
    张三    	  'M'   	18     162
    李四    	  'F'     	19     169
    杨二     	 ' M'     	17     164
    王五     	  'F'    	25     167
>> T.Properties.RowNames={'1';'2';'3';'4'}
T =
  4×4 table
           Name      Gender    Age    Height
         ________    ______    ___    ______
    1    {'张三'}    {'M'}     18      162
    2    {'李四'}    {'F'}     19      169
    3    {'杨二'}    {'M'}     17      164
    4    {'王五'}    {'F'}     25      167

创建空表后添加列数据

可以用不带参数的table函数和DataFrame函数创建空表或空DataFrame,然后通过引用列变量添加列数据,最后生成表和DataFrame。

下面先创建一个空的table对象,然后用对象点引用的方式逐个指定变量名称和值。

code.matlab
>> Name={'张三';'李四';'杨二';'王五'};
>> Age=[18;19;17;20];
>> Height=[162;169;164;167];
>> Weight=[116;103;131;133];
>> T=table;  %创建空的table对象
>> T.Name=Name;
>> T.Age=Age;
>> T.Height=Height;
>> T.Weight=Weight
T=
   Name    Age    Height    Weight
   ____    ___    ______    ______
  '张三'    18     162       116
  '李四'    19     169       103
  '杨二'    17     164       131
  '王五'    20     167       133

使用表对象的Properties.RowNames属性指定索引列。

code.matlab
>> T.Properties.RowNames={'1';'2';'3';'4'}
T =
  4×4 table
           Name      Gender    Age    Height
         ________    ______    ___    ______
    1    {'张三'}    {'M'}     18      162
    2    {'李四'}    {'F'}     19      169
    3    {'杨二'}    {'M'}     17      164
    4    {'王五'}    {'F'}     25      167

通过类型转换创建表

通过数据类型转换,可以将其他类型的数据转换为表或DataFrame。

MATLAB中,使用array2table, cell2table, struct2table和timetable2table等函数可以将普通数组、元胞数组、结构数组和时间表转换为表。

下面创建一个普通数组A,用array2table函数将它转换为表:

code.matlab
>> A=[92 88 93;84 75 96;87 68 89]
A =
    92    88    93
    84    75    96
    87    68    89

用array2table函数将数组A转换为表,用VariableNames参数指定变量名称。

code.matlab
>> T=array2table(A,'VariableNames',{'语文' '数学' '物理'})
T =
  3×3 table
    语文    数学    物理
    ____    ____    ____
     92      88      93
     84      75      96
     87      68      89

下面创建一个元胞数组A,用cell2table函数将它转换为表:

code.matlab
>> A={92 88 93;84 75 96;87 68 89}
A =
  3×3 cell 数组
    {[92]}    {[88]}    {[93]}
    {[84]}    {[75]}    {[96]}
    {[87]}    {[68]}    {[89]}

用cell2table函数将数组A转换为表,用VariableNames参数指定变量名称。

code.matlab
>> T=cell2table(A,'VariableNames',{'语文' '数学' '物理'})
T =
  3×3 table
    语文    数学    物理
    ____    ____    ____
     92      88      93
     84      75      96
     87      68      89

通过导入文件数据创建表

此外,还可以通过从文件导入数据来创建表,这也是最常用的一种方法。可以从Excel文件、CSV文件和文本文件等导入数据。这部分内容将在1.3节详细介绍。

描述表

创建表或DataFrame后,可以用函数或对象的方法对它们进行描述。描述的内容包括变量信息、数组高度、宽度、大小、值的描述性统计等。

使用summary函数可以获取表的信息,包括表中各变量的数据类型、数组大小等,对于数值型变量,给出数据的最小值、最大值和中值。

下面创建一个表,然后用summary函数获取该表的信息。

code.matlab
>> T=table({'张三';'李四';'杨二';'王五'},{'M';'F';'M';'F'},[18;19;17;25],...
    [162;169;164;167],logical([0;0;0;1]),...
    'VariableNames',{'Name' 'Gender' 'Age' 'Height' 'Married'})
>> summary(T)
Variables:
    Name: 4×1 cell array of character vectors
    Gender: 4×1 cell array of character vectors
    Age: 4×1 double
        Values:
            Min           17
            Median      18.5
            Max           25
    Height: 4×1 double
        Values:
            Min          162
            Median     165.5
            Max          169
    Married: 4×1 logical
        Values:
            True        1
            False       3

使用height函数获取表的行数,用width函数获取表的变量数。

code.matlab
>> height(T)
ans =
     4
>> width(T)
ans =
     5

用size函数获取表的大小。

code.matlab
>> size(T)
ans =
     4     5

使用head函数和tail函数获取给定表的前N行和后N行。

下面创建一个有10行数据的表,用head函数获取表的前5行,用tail函数获取表的后5行。

code.matlab
>> ID={'1';'2';'3';'4';'5';'6';'7';'8';'9';'10'};
>> Name={'张三';'李四';'杨二';'王五';'韩英';'赵军';'余成';'黄丽';'谭梅';'苏云'};
>> Age=[18;19;17;21;19;22;20;18;17;23];
>> Height=[162;169;164;167;173;168;171;167;175;170];
>> Weight=[116;103;131;133;93;121;113;101;98;130];
>> T=table(Name,Age,Height,Weight, 'RowNames',ID);
>> head(T,5)    %获取前5行
ans =
  5×4 table
           Name      Age    Height    Weight
         ________    ___    ______    ______
    1    {'张三'}    18      162       116
    2    {'李四'}    19      169       103
    3    {'杨二'}    17      164       131
    4    {'王五'}    21      167       133
    5    {'韩英'}    19      173        93
>> tail(T,5)    %获取最后5行
ans =
  5×4 table
            Name      Age    Height    Weight
          ________    ___    ______    ______
    6     {'赵军'}    22      168       121
    7     {'余成'}    20      171       113
    8     {'黄丽'}    18      167       101
    9     {'谭梅'}    17      175        98
    10    {'苏云'}    23      170       130