处理表和DataFrame之前需要先创建它们,可以用直接法、分步法、类型转换法和文件导入法等方法创建它们。[大谦MATLAB,dqmatlab点com]
直接创建表
使用MATLAB中的table函数可以直接创建表,使用Python中pandas包的DataFrame函数可以直接创建DataFrame。
根据工作区变量创建表,首先创建具有相同行数的工作区变量,然后用table函数创建表。
>> ID={'1';'2';'3';'4'};
>> Name={'张三';'李四';'杨二';'王五'};
>> Age=[18;19;17;21];
>> Height=[162;169;164;167];
>> Weight=[116;103;131;133];
用table函数生成表,用'RowNames'参数指定表的索引列为ID。
>> 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'参数指定表的列名。
>> 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对象,然后用对象点引用的方式逐个指定变量名称和值。
>> 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属性指定索引列。
>> 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函数将它转换为表:
>> A=[92 88 93;84 75 96;87 68 89]
A =
92 88 93
84 75 96
87 68 89
用array2table函数将数组A转换为表,用VariableNames参数指定变量名称。
>> T=array2table(A,'VariableNames',{'语文' '数学' '物理'})
T =
3×3 table
语文 数学 物理
____ ____ ____
92 88 93
84 75 96
87 68 89
下面创建一个元胞数组A,用cell2table函数将它转换为表:
>> 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参数指定变量名称。
>> T=cell2table(A,'VariableNames',{'语文' '数学' '物理'})
T =
3×3 table
语文 数学 物理
____ ____ ____
92 88 93
84 75 96
87 68 89
通过导入文件数据创建表
此外,还可以通过从文件导入数据来创建表,这也是最常用的一种方法。可以从Excel文件、CSV文件和文本文件等导入数据。这部分内容将在1.3节详细介绍。
描述表
创建表或DataFrame后,可以用函数或对象的方法对它们进行描述。描述的内容包括变量信息、数组高度、宽度、大小、值的描述性统计等。
使用summary函数可以获取表的信息,包括表中各变量的数据类型、数组大小等,对于数值型变量,给出数据的最小值、最大值和中值。
下面创建一个表,然后用summary函数获取该表的信息。
>> 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函数获取表的变量数。
>> height(T)
ans =
4
>> width(T)
ans =
5
用size函数获取表的大小。
>> size(T)
ans =
4 5
使用head函数和tail函数获取给定表的前N行和后N行。
下面创建一个有10行数据的表,用head函数获取表的前5行,用tail函数获取表的后5行。
>> 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