姓名:李晨睿 学号:22021211235 电子工程学院
Matlab学习笔记4——readtable
基于文件创建表,第一行就作为表头,如果取的表头符合matlab的命名规则,那么该列直接如此命名。
语法
T = readtable(filename)
T = readtable(filename,opts)
T = readtable(___,Name,Value)
readtable 基于文件的扩展名确定文件格式:
.txt、.dat 或 .csv(适用于带分隔符的文本文件)
.xls、.xlsb、.xlsm、.xlsx、.xltm、.xltx 或 .ods(适用于电子表格文件)
readtable 为该文件中的每列在 T 中创建一个变量并从文件的第一行中读取变量名称。默认情况下,readtable 会根据在输入文件的每列中检测到的数据值来创建具有适当数据类型的变量。
用法
调用table构造函数来构造table对象:
下面程序中第1,2行用元胞数组来表示表中每一列的数据,第3行规定了表头的名称,第4行调用table的构造函数创建table对象,先输入数据,再输入表头的名称。表头通过table对象的VariableNames属性来设置。
name={‘Abby’;‘Bob’;‘Charlie’}; % 3x1列向量
number={‘5086470001’;‘5086470002’;‘5086470003’}; % 3x1列向量
colName={‘Name’,‘Number’};
phonetable=table(name,number,‘VariableNames’,colName)
保存原始列标题
当运行下面这行代码时,会产生警告如下:
Ori_test_data2 = readtable(Loadpath2);
警告: 在为表创建变量名称之前,对文件中的列标题进行了修改,以使其成为有效的 MATLAB 标识符。原始列标题保存在
VariableDescriptions 属性中。
将 ‘VariableNamingRule’ 设置为 ‘preserve’ 以使用原始列标题作为表变量名称。
建议修改为此:
Ori_test_data2 = readtable(Loadpath2,‘VariableNamingRule’,‘preserve’);
基于文本文件创建表
加载文件 myCsvTable.dat 并在文本编辑器中预览其内容。屏幕截图如下所示。请注意,该文件包含逗号分隔的列向数据。
1
filename = ‘myCsvTable.dat’;
基于逗号分隔的文本文件创建表。生成的表 T 为文件中的每一列包含一个变量,readtable 将文件第一行中的项视为变量名称。
T = readtable(filename)
T=5×6 table
LastName Gender Age Height Weight Smoker
____________ ______ ___ ______ ______ ______
{'Smith' } {'M'} 38 71 176 1
{'Johnson' } {'M'} 43 69 163 0
{'Williams'} {'F'} 38 64 131 0
{'Jones' } {'F'} 40 67 133 0
{'Brown' } {'F'} 49 64 119 0
1
2
3
4
5
忽略标题并填充缺失值
从 R2020a 开始,readtable函数读取输入文件的方式就好像它自动对该文件调用 detectImportOptions 函数一样。它可以检测数据类型,丢弃多余的标题行,并填充缺失值。
例如,在文本编辑器中预览文件 headersAndMissing.txt。该文件有一个列名行,还有一个标题行。最后两行有空缺,前面的各行包含数据值。
1
2
基于该文件创建一个表。readtable 函数将丢弃标题。此外,它还用适当的缺失值来填补空缺,对于数值变量,用 NaN 值;对于文本,用空字符向量。
T = readtable(‘headersAndMissing.txt’)
T=5×6 table
LastName Gender Age Height Weight Smoker
___________ __________ ___ ______ ______ ______
{'Wu' } {'M' } 38 71 176 1
{'Johnson'} {'M' } 43 69 163 0
{'Sanchez'} {'F' } 38 64 131 0
{'Brown' } {'F' } NaN 67 133 0
{'Picard' } **{0x0 char}** **NaN** 64 119 0
1
2
3
4
5
要还原以前的版本的默认行为,请指定 ‘Format’,‘auto’ 名称-值对组参数。readtable 会将标题作为数据读取,因此,它会将所有表变量均转换为文本。
T = readtable(‘headersAndMissing.txt’,‘Format’,‘auto’)
T=6×6 table
LastName Gender Age Height Weight Smoker
___________ __________ __________ _______ _______
{'string' } {'string'} {'int' } {'int'} {'int'} {'boolean'}
{'Wu' } {'M' } {'38' } {'71' } {'176'} {'1' }
{'Johnson'} {'M' } {'43' } {'69' } {'163'} {'0' }
{'Sanchez'} {'F' } {'38' } {'64' } {'131'} {'0' }
{'Brown' } {'F' } {0x0 char} {'67' } {'133'} {'0' }
{'Picard' } {0x0 char} **{0x0 char}** {'64' } {'119'} {'0' }
1
2
3
4
5
6
基于文本文件创建表,无列标题
在文本编辑器中预览文件 mySpaceDelimTable.txt。屏幕截图如下所示。请注意,该文件包含空格分隔的列向数据。
基于以空格分隔的文本文件创建一个表。由于文件的第一行不包含可检测到的列名称,因此 readtable 函数将分配默认的变量名称 Var1 到 Var5。
T = readtable(‘mySpaceDelimTable.txt’)
T=3×5 table
Var1 Var2 Var3 Var4 Var5
_____ ____ ____ ______ _________
{'M'} 45 45 {'NY'} {'true' }
{'F'} 41 32 {'CA'} {'false'}
{'M'} 40 34 {'MA'} {'false'}
1
2
3
基于文本文件创建表,无列标题
% 文本内容(有缺失值)
LastName,Gender,Age,Height,Weight,吸烟
Smith,M,38,71,176,1
Johnson,M,43,69,163,0
Williams,F,38,64,131,0
Jones,F, ,67,133,0
Brown, , ,64,119,0
% 如果有一个中文名,那么需要设置一下
T = readtable(‘csv_table_missing.txt’, “VariableNamingRule”, “preserve”)
% 访问中文标题内容
Smoker = T.(“吸烟”);
% 获取列名
variable_name = T.Properties.VariableNames
% 修改第一列列名称
T.Properties.VariableNames{1} = ‘Gender’
更多用法移步:https://blog.csdn.net/jk_101/article/details/118086060
https://zhuanlan.zhihu.com/p/358793886
————————————————
版权声明:本文为CSDN博主「i_can_do_nothing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/i_can_do_nothing/article/details/128254690