将电子表格数据读入到表中
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
会自动检测变量的数据类型。但如果数据中包含非标准的日期、持续时间或重复的标签,则可以将这些变量转换为其正确的数据类型。通过将变量转换为其正确的数据类型,可以执行高效的计算和比较,并改善内存的使用。例如,将变量 Year
、Month
和 DayofMonth
表示为一个 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'};
使用 readall
或 read
函数导入数据。readall
函数要求所有数据都能放入内存中,样本数据符合此要求。导入后,计算此数据集的最大到港延误。
alldata = readall(ds); max(alldata.ArrDelay)/60
ans = 15.2333
对于大型数据集,请使用 read
函数导入文件的部分内容。有关详细信息,请参阅读取电子表格文件集合或序列。
另请参阅
readtable
| spreadsheetDatastore