通常情况下,可以使用 readtable 函数来导入表。但有时导入表格数据需要对导入过程施加更多控制。例如,您可能希望选择变量,以导入或处理缺失数据或存在导致错误的数据的行。要控制导入过程,您可以创建导入选项对象。该对象具有您可以根据自己的导入需求进行调整的属性。
要为样本数据集 airlinesmall.csv 创建导入选项对象,请使用 detectImportOptions 函数。detectImportOptions 函数将为此文本文件创建一个 DelimitedTextImportOptions 对象。有关导入选项对象的完整属性列表,请参阅 detectImportOptions 参考页。
opts = detectImportOptions('airlinesmall.csv');
您可以调整导入选项对象所包含的属性,以便控制导入过程。一些属性适用于整个表,而另一些则适用于特定的变量。影响整个表的属性包括用于管理导致错误的数据或缺失数据的规则。例如,通过将 ImportErrorRule 设为 ‘omitrow’,删除包含会导致导入错误的数据的行。通过将 MissingRule 设为 ‘fill’ 替换缺失值。FillValue 属性值决定了用来替换缺失值的值。例如,您可以用 NaN 来替换缺失值。
opts.ImportErrorRule = 'omitrow';
opts.MissingRule = 'fill';
要获取和设置特定变量的选项,请使用 getvaropts、setvartype 和 setvaropts 函数。例如,使用 getvaropts 函数查看名为 FlightNum、Origin、Dest 和 ArrDelay 的变量的当前选项。
getvaropts(opts,{'FlightNum','Origin','Dest','ArrDelay'});
使用 setvartype 函数更改变量的数据类型:
由于变量 FlightNum 中的值为航班标识符而不是数值,因此需要将其数据类型更改为 char。
由于变量 Origin 和 Dest 指定了重复文本值的有限集合,因此需要将其数据类型更改为 categorical。
opts = setvartype(opts,{'FlightNum','Origin','Dest','ArrDelay'},...
{'char','categorical','categorical','single'});
使用 setvaropts 函数更改其他属性:
对于 FlightNum 变量,通过将 WhiteSpaceRule 属性设为 trimleading,删除文本中的任何前导空白。
对于 ArrDelay 变量,通过设置 TreatAsMissing 属性,将包含 0 或 NA 的字段替换为在 FillValue 属性中指定的值。
opts = setvaropts(opts,'FlightNum','WhitespaceRule','trimleading');
opts = setvaropts(opts,'ArrDelay','TreatAsMissing',{'0','NA'});
指定要获取的变量,使用 readtable 导入这些变量,并显示表的前 8 行。
opts.SelectedVariableNames = {'FlightNum','Origin','Dest','ArrDelay'};
T = readtable('airlinesmall.csv',opts);
T(1:8,:)
ans=8×4 table
FlightNum Origin Dest ArrDelay
_________ ______ ____ ________
{'1503'} LAX SJC 8
{'1550'} SJC BUR 8
{'1589'} SAN SMF 21
{'1655'} BUR SJC 13
{'1702'} SMF LAX 4
{'1729'} LAX SJC 59
{'1763'} SAN SFO 3
{'1800'} SEA LAX 11