Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

定义表的导入选项

通常情况下,可以使用 readtable 函数来导入表。但有时导入表格数据需要对导入过程施加更多控制。例如,您可能希望选择变量,以导入或处理缺失数据或存在导致错误的数据的行。要控制导入过程,您可以创建导入选项对象。该对象具有您可以根据自己的导入需求进行调整的属性。

创建导入选项

要为样本数据集 airlinesmall.csv 创建导入选项对象,请使用 detectImportOptions 函数。detectImportOptions 函数将为此文本文件创建一个 DelimitedTextImportOptions 对象。有关导入选项对象的完整属性列表,请参阅 detectImportOptions 参考页。

opts = detectImportOptions('airlinesmall.csv');

自定义表级别的导入选项

您可以调整导入选项对象所包含的属性,以便控制导入过程。一些属性适用于整个表,而另一些则适用于特定的变量。影响整个表的属性包括用于管理导致错误的数据或缺失数据的规则。例如,通过将 ImportErrorRule 设为 'omitrow',删除包含会导致导入错误的数据的行。通过将 MissingRule 设为 'fill' 替换缺失值。FillValue 属性值决定了用来替换缺失值的值。例如,您可以用 NaN 来替换缺失值。

opts.ImportErrorRule = 'omitrow';
opts.MissingRule = 'fill';

自定义变量级别的导入选项

要获取和设置特定变量的选项,请使用 getvaroptssetvartypesetvaropts 函数。例如,使用 getvaropts 函数查看名为 FlightNumOriginDestArrDelay 的变量的当前选项。

getvaropts(opts,{'FlightNum','Origin','Dest','ArrDelay'});

使用 setvartype 函数更改变量的数据类型:

  • 由于变量 FlightNum 中的值为航班标识符而不是数值,因此需要将其数据类型更改为 char

  • 由于变量 OriginDest 指定了重复文本值的有限集合,因此需要将其数据类型更改为 categorical

 opts = setvartype(opts,{'FlightNum','Origin','Dest','ArrDelay'},...
                        {'char','categorical','categorical','single'});

使用 setvaropts 函数更改其他属性:

  • 对于 FlightNum 变量,通过将 WhiteSpaceRule 属性设为 trimleading,删除文本中的任何前导空白。

  • 对于 ArrDelay 变量,通过设置 TreatAsMissing 属性,将包含 0NA 的字段替换为在 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   

另请参阅

| | | | | | | | |

相关主题