Matlab学习笔记4——readtable

本文介绍Matlab中使用readtable函数从不同格式文件中读取数据的方法。涵盖自动检测文件格式、处理缺失值及列标题等内容。

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 并在文本编辑器中预览其内容。屏幕截图如下所示。请注意,该文件包含逗号分隔的列向数据。

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   
忽略标题并填充缺失值
   从 R2020a 开始,readtable函数读取输入文件的方式就好像它自动对该文件调用 detectImportOptions 函数一样。它可以检测数据类型,丢弃多余的标题行,并填充缺失值。
   例如,在文本编辑器中预览文件 headersAndMissing.txt。该文件有一个列名行,还有一个标题行。最后两行有空缺,前面的各行包含数据值。

在这里插入图片描述
基于该文件创建一个表。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 

要还原以前的版本的默认行为,请指定 ‘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'      }
基于文本文件创建表,无列标题

在文本编辑器中预览文件 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'}
基于文本文件创建表,无列标题

% 文本内容(有缺失值)
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.youkuaiyun.com/jk_101/article/details/118086060
https://zhuanlan.zhihu.com/p/358793886

原创matlab读取txt中文文本的解决方案-程序.rar matlab对中文的支持一直以来都是个不小的问题,尤其在读取文本方面。一般读出的中文文本都是乱码,网上找了半天没找到答案,自己研究了一下,在快要绝望的时候终于有了结果~ 呵呵     这个问题是在本论坛中的GUI教学视频第5课中提到的,学生的成绩单必须要转换成英文 数字才能正常读入,我用的是中文系统,用fopen试了一下,结果读出的中文是'???'样的乱码。不多废话,还是用本课视频的例子,为了证明读取中文的有效性,我把源程序的思路做了一下改动,界面中不做中文string的设置,全部由程序给出,解决方案如下 编程环境:matlab7.1;Windows XP professional SP2 更改后的代码 function matlab_GUI_4_OpeningFcn fdata = importdata    % 导入文本数据 ftextdatasize = size;   % 求文本类数据长度 fdatasize = size    % 求数据长度 counter = 1; while counter<ftextdatasize  % ftextdatasize 为 fdata.textdata 行数     % 从第二行开始取(从第二行起才为人名),第一行为标识     xingming = fdata.textdata;     counter = counter 1; end counter = 1; while counter<fdatasize 1     chengji = fdata.data;     counter = counter 1;    end set; handles.chengji = chengji; % 设成了全局变量,留着扩展用,其实只用局部变量也成 handles.kemu = fdata.textdata); set); set); set); set); 复制代码function listbox1_Callback value = get; % value为行向量,选择前2项即为[1 2]; set)); 复制代码结果如图 未命名.JPG 感谢管理员为我们做的如此精彩的视频,附件中为数据及代码(包括本例代码以及GUI视频教程第5课程序代码)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值