Main Content

将电子表格数据读入到表中

MATLAB® 中表示电子表格数据的最佳方法是在表中表示,表可以存储混合的数值和文本数据,以及变量和行名称。可采用交互方式或编程方式将数据读入到表中。要以交互方式选择数据,请在主页选项卡中的变量部分中点击导入数据。要以编程方式导入数据,请使用以下函数之一:

  • readtable - 读取一个工作表。

  • spreadsheetDatastore - 读取多个工作表或文件。

以下示例说明如何同时使用这两个函数以编程方式导入电子表格数据。样本数据 airlinesmall_subset.xlsx 包含与 1996 年到 2008 年之间的每一年一一对应的工作表。工作表名称与年份对应,例如 2003

读取工作表中的所有数据

调用 readtable,读取名为 2008 的工作表中的所有数据,然后仅显示前 10 个行和列。使用 Sheet 名称-值对组参量指定工作表名称。如果数据位于文件的第一个工作表中,则不需要指定 Sheet

T = readtable('airlinesmall_subset.xlsx','Sheet','2008');
T(1:10,1:10)
ans=10×10 table
    Year    Month    DayofMonth    DayOfWeek    DepTime    CRSDepTime    ArrTime    CRSArrTime    UniqueCarrier    FlightNum
    ____    _____    __________    _________    _______    __________    _______    __________    _____________    _________

    2008      1           3            4         1012         1010        1136         1135          {'WN'}           752   
    2008      1           4            5         1303         1300        1411         1415          {'WN'}          1161   
    2008      1           6            7         2134         2115        2242         2220          {'WN'}          1830   
    2008      1           7            1         1734         1655          54           30          {'WN'}           302   
    2008      1           8            2         1750         1755        2018         2035          {'WN'}          1305   
    2008      1           9            3          640          645         855          905          {'WN'}           896   
    2008      1          10            4         1943         1945        2039         2040          {'WN'}           120   
    2008      1          11            5         1303         1305        1401         1400          {'WN'}          1685   
    2008      1          13            7         1226         1230        1415         1400          {'WN'}          1118   
    2008      1          14            1         1337         1340        1623         1630          {'WN'}           730   

读取特定工作表中的选定范围

通过指定范围 'A1:E11',从名为 1996 的工作表中仅读取前 5 列中的 10 行数据。readtable 函数将返回一个 10×5 的表。

T_selected = readtable('airlinesmall_subset.xlsx','Sheet','1996','Range','A1:E11')
T_selected=10×5 table
    Year    Month    DayofMonth    DayOfWeek    DepTime
    ____    _____    __________    _________    _______

    1996      1          18            4         2117  
    1996      1          12            5         1252  
    1996      1          16            2         1441  
    1996      1           1            1         2258  
    1996      1           4            4         1814  
    1996      1          31            3         1822  
    1996      1          18            4          729  
    1996      1          26            5         1704  
    1996      1          11            4         1858  
    1996      1           7            7         2100  

将变量转换为日期时间、持续时间或分类

在导入过程中,readtable 会自动检测变量的数据类型。但如果数据中包含非标准的日期、持续时间或重复的标签,则可以将这些变量转换为其正确的数据类型。通过将变量转换为其正确的数据类型,可以执行高效的计算和比较,并改善内存的使用。例如,将变量 YearMonthDayofMonth 表示为一个 datetime 变量,将 UniqueCarrier 表示为 categorical,将 ArrDelay 表示为以分钟为单位的 duration

data = T(:,{'Year','Month','DayofMonth','UniqueCarrier','ArrDelay'});
data.Date = datetime(data.Year,data.Month,data.DayofMonth);
data.UniqueCarrier = categorical(data.UniqueCarrier);
data.ArrDelay = minutes(data.ArrDelay);

查找当年延迟最长的一天,然后显示该日期。

ind = find(data.ArrDelay == max(data.ArrDelay));
data.Date(ind)
ans = datetime
   07-Apr-2008

读取电子表格文件中的所有工作表

数据存储适合处理分布在多个工作表或多个电子表格文件中的任意大的数据量。可通过数据存储执行数据导入和数据处理。

airlinesmall_subset.xlsx 中的工作表集合创建一个数据存储,选择要导入的变量,然后预览数据。

ds = spreadsheetDatastore('airlinesmall_subset.xlsx');
ds.SelectedVariableNames = {'Year','Month','DayofMonth','UniqueCarrier','ArrDelay'};
preview(ds)
ans=8×5 table
    Year    Month    DayofMonth    UniqueCarrier    ArrDelay
    ____    _____    __________    _____________    ________

    1996      1          18           {'HP'}            6   
    1996      1          12           {'HP'}           11   
    1996      1          16           {'HP'}          -13   
    1996      1           1           {'HP'}            1   
    1996      1           4           {'US'}           -9   
    1996      1          31           {'US'}            9   
    1996      1          18           {'US'}           -2   
    1996      1          26           {'NW'}          -10   

在导入数据之前,可以指定要使用的数据类型。在此示例中,以分类变量的形式导入 UniqueCarrier

 ds.SelectedVariableTypes(4) = {'categorical'};

使用 readallread 函数导入数据。readall 函数要求所有数据都能放入内存中,样本数据符合此要求。导入后,计算此数据集的最大到港延误。

alldata = readall(ds);
max(alldata.ArrDelay)/60
ans = 
15.2333

对于大型数据集,请使用 read 函数导入文件的部分内容。有关详细信息,请参阅读取电子表格文件集合或序列

另请参阅

|

相关主题