主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

将数据从文本文件导入到表

如果您的文本文件包含表格数据,您可以使用 readtable 函数以表的形式导入数据。一个表由若干列向变量组成,每个变量包含相同类型的数据。表中的变量可以保留不同数据类型和大小,但每个变量必须有相同的行数。

readtable 检测输入文件的元素以确定如何最好地导入输入文件的内容。readtable 根据分隔符、标题行数、变量数、变量类型以及前 250 行非空数据的元数据分析数据的格式。您可以使用名称-值参量或导入选项对象自定义导入的各个方面。

将文本文件读取为表

您可以使用 readtable 函数从文本文件中将表格数据导入表中。例如,样本文件 outages.csv 包含以逗号分隔的列向数据。

outages_screenshot.png

outages.csv 创建一个表。对于文件中的每一列,生成的表包含一个对应的变量,readtable 将文件第一行中的项视为变量名称。使用索引显示表的前三行和前五列。

T = readtable("outages.csv");
T(1:3,1:6)
ans=3×6 table
       Region           OutageTime        Loss     Customers     RestorationTime          Cause      
    _____________    ________________    ______    __________    ________________    ________________

    {'SouthWest'}    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'}
    {'SouthEast'}    2003-01-23 00:49    530.14    2.1204e+05                 NaT    {'winter storm'}
    {'SouthEast'}    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'}

指定分隔符

默认情况下,readtable 检测文件分隔符并使用它将数据拆分为表元素。readtable 通过使用变量数和前 250 行非空数据中列的数据类型一致性来确定分隔符。例如,因为 airlinesmall.csv 包含以逗号分隔的数据,readtable 会检测到分隔符为“,”并相应地拆分数据。

T = readtable("airlinesmall.csv");

如果 readtable 未选择您预期的分隔符,您可以使用 Delimiter 名称-值参量指定分隔符。

T = readtable("airlinesmall.csv",Delimiter=",");

读取带列标题的数据

默认情况下,readtable 确定您的文件是否有一行标题可用作变量名称。例如,headersAndMissing.txt 文件的前两行分别包含变量名称和标题。readtable 会保留第一行(变量名称),丢弃第二行(标题)。

T = readtable("headersAndMissing.txt");

您可以使用 NumHeaderLines 名称-值参量指定在文件开头要跳过的标题行数。例如,指定第一行为在读取数据之前跳过的标题行。

T = readtable("headersAndMissing.txt",NumHeaderLines=1)
T=5×6 table
      string        string_1     int    int_1    int_2    boolean
    ___________    __________    ___    _____    _____    _______

    {'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' }    {0×0 char}    NaN     64       119        0   

读取不带列标题的数据

如果您的文件没有列标题,readtable 会以 Var1Var2、...、VarN 格式赋予默认变量名称。例如,mySpaceDelimTable.txt 在第一行中没有列名称,因此 readtable 会赋予默认变量名称 Var1Var5。查看表的前三行。

T = readtable("mySpaceDelimTable.txt");
head(T,3)
    Var1     Var2    Var3     Var4       Var5   
    _____    ____    ____    ______    _________

    {'M'}     45      45     {'NY'}    {'true' }
    {'F'}     41      32     {'CA'}    {'false'}
    {'M'}     40      34     {'MA'}    {'false'}

如果您的文件有列标题,但您不想读入它们,请将 ReadVariableNames 名称-值参量指定为 false

T = readtable("headersAndMissing.txt",ReadVariableNames=false);

填充缺失数据

如果您的文件包含缺失数据,readtable 会用适当的 missing 值填充数据间隙。如果间隙仅包含空白字符或在找到变量之前行结束,则间隙视为缺失数据。例如,在文件 headersAndMissing.txt 中,最后两行有空缺,前面的各行包含数据值。默认情况下,readtable 会用适当的缺失值(如 NaN)填充这些间隙。

T = readtable("headersAndMissing.txt");

如果您要调整 readtable 处理缺失数据的方式,请使用 MissingRule 名称-值参量。例如,要省略包含缺失数据的行,请将 MissingRule 指定为 "omitrow"

T = readtable("headersAndMissing.txt",MissingRule="omitrow");

转换日期区域设置

如果您的文件包含与系统不同的日期区域设置中的日期值,readtable 可以转换并使用您首选的日期区域设置导入数据值。例如,通过使用指定的字符编码方案读取文件并使用美国英语区域设置解释日期值,从 outages.csv 创建一个表。使用 Encoding 名称-值参量指定文件的字符编码方案。使用 DateLocale 名称-值参量指定输入日期的格式和区域设置。查看表的前三行。

T = readtable("outages.csv", ...
    Encoding="ISO-8859-15", ...
    DateLocale="en_US");
head(T,3)
       Region           OutageTime        Loss     Customers     RestorationTime          Cause      
    _____________    ________________    ______    __________    ________________    ________________

    {'SouthWest'}    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'}
    {'SouthEast'}    2003-01-23 00:49    530.14    2.1204e+05                 NaT    {'winter storm'}
    {'SouthEast'}    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'}

读取十六进制和二进制数

如果您的文件包含十六进制或二进制字面值,readtable 可以读取它们并将其存储为表中的数值变量。readtable 函数会自动读取分别包含 0x0b 前缀的十六进制和二进制数字。数值使用整数数据类型存储。您也可以使用导入选项来读取不带前缀的这些数字。

例如,从 hexAndBinary.txt 文件创建一个表。readtable 检测具有 0x0b 前缀的数字,并将它们作为整数存储。

T = readtable("hexAndBinary.txt");

默认情况下,readtable 使用尽可能最小的无符号整数类来导入十六进制和二进制字面值。

要指定用于存储从十六进制和二进制数字导入的数值的数据类型,请使用 HexTypeBinaryType 名称-值参量。例如,将值存储为有符号 32 位整数。

T = readtable("hexAndBinary.txt",HexType="int32",BinaryType="int32");

使用导入选项配置导入

要进一步配置导入,您可以使用导入选项对象来控制 readtable 如何解释您的文件。与名称-值参量相比,导入选项对象在文件导入配置上可以提供更多的控制、更好的性能,并可重复使用。

导入选项对象包含存储检测到的有关输入文件信息的属性。您可以处理特定变量或使用圆点表示法处理所有变量。例如,从 outages.csv 创建一个导入选项对象。查看导入选项对象的 VariableNames 属性,该属性存储检测到的变量名称。

opts = detectImportOptions("outages.csv");
opts.VariableNames
ans = 1×6 cell
    {'Region'}    {'OutageTime'}    {'Loss'}    {'Customers'}    {'RestorationTime'}    {'Cause'}

要更改特定变量的数据类型,请使用 setvartype 函数。例如,将 Region 变量的数据类型更改为 string

opts = setvartype(opts,"Region","string");

要为特定变量设置选项,请使用 setvaropts 函数。例如,如果 RestorationTime 变量有空字段,则生成错误。

opts = setvaropts(opts,"RestorationTime",EmptyFieldRule="error");

要指定要导入的变量子集,请使用 SelectedVariableNames 属性。例如,仅导入 RegionRestorationTime 数据。

opts.SelectedVariableNames = ["Region","RestorationTime"];

在完成导入选项对象的配置后,将其与 readtable 结合使用以导入您的文件。

T = readtable("outages.csv",opts);
head(T,3)
      Region       RestorationTime 
    ___________    ________________

    "SouthWest"    2002-02-07 16:50
    "SouthEast"                 NaT
    "SouthEast"    2003-02-17 08:14

有关使用导入选项对象的详细信息,请参阅 detectImportOptions

另请参阅

| | | | | |

主题