Matlab学习笔记4——readtable

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,在处理格数据时经常会遇到。当您从外部数据源(如CSV或Excel文件)读取数据并将其导入MATLAB格(table)数据类型中时,MATLAB会尝试根据数据文件中的标题创建变量名称。由于MATLAB变量名有一定的规则限制,例如变量名不能包含空格和特殊字符等,因此如果文件中的标题不满足这些规则,MATLAB会自动修改这些标题创建有效变量名。 这个过程是这样的: 1. MATLAB读取外部文件中的标题。 2. 如果标题不是有效MATLAB标识符(变量名),MATLAB会对这些标题进行修改,以确保它们符合MATLAB的命名规则。 3. 修改后的标题被用作变量名称。 例如,如果原始文件中的标题是“First Name”和“Last Name”,MATLAB会将它们修改为“FirstName”和“LastName”。 警告信息中提到的`VariableDescriptions`属性是原始标题的保存位置。如果您希望使用原始标题作为变量名称,可以通过设置`VariableNamingRule`属性为`'preserve'`来实现这一点。 要实现这个设置,可以使用MATLAB的`readtable`函数,如下所示: ```matlab opts = detectImportOptions('datafile.csv', 'VariableNamingRule', 'preserve'); T = readtable('datafile.csv', opts); ``` 在这段代码中,`detectImportOptions`函数用于设置导入选项,其中`VariableNamingRule`被设置为`'preserve'`以保留原始标题。然后,使用这些设置的选项作为参数调用`readtable`函数来读取数据文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值