The detectImportOptions not able to recognize and use 2nd row of a file as column name

62 views (last 30 days)
filename = 'data.csv';
opts = detectImportOptions(filename);
% Adjust options to use the second row as headers
opts.DataLines = [3 Inf]; % Start reading data from the third row
opts.VariableNamesLine = 2; % Use the second row for column names
% Read the table
dataTable = readtable(filename, opts);
The above code is not able to return a data table with the columns names same as the names mention in second row of the file, Instead it renames the columns in datatable as Var1, Var2, Var3 and Var4 instead of second, volt, volt and Ampere.

Accepted Answer

dpb
dpb on 6 Aug 2025 at 21:54
Edited: dpb on 7 Aug 2025 at 20:45
l=readlines('data.csv')
l = 4×1 string array
"x-axis,1,2,4" "second,Volt,Volt,Ampere" "1.00E+00,2.00E+00,4.00E+00,4.50E+01" ""
tData=readtable('data.csv','headerlines',1,'readvariablenames',1)
tData = 1×4 table
second Volt Volt_1 Ampere ______ ____ ______ ______ 1 2 4 45
opt=detectImportOptions('data.csv','headerlines',1)
opt =
DelimitedTextImportOptions with properties: Format Properties: Delimiter: {','} Whitespace: '\b\t ' LineEnding: {'\n' '\r' '\r\n'} CommentStyle: {} ConsecutiveDelimitersRule: 'split' LeadingDelimitersRule: 'keep' TrailingDelimitersRule: 'ignore' EmptyLineRule: 'skip' Encoding: 'UTF-8' Replacement Properties: MissingRule: 'fill' ImportErrorRule: 'fill' ExtraColumnsRule: 'addvars' Variable Import Properties: Set types by name using setvartype VariableNames: {'second', 'Volt', 'Volt_1' ... and 1 more} VariableTypes: {'double', 'double', 'double' ... and 1 more} SelectedVariableNames: {'second', 'Volt', 'Volt_1' ... and 1 more} VariableOptions: [1-by-4 matlab.io.VariableImportOptions] Access VariableOptions sub-properties using setvaropts/getvaropts VariableNamingRule: 'modify' Location Properties: DataLines: [3 Inf] VariableNamesLine: 2 RowNamesColumn: 0 VariableUnitsLine: 0 VariableDescriptionsLine: 0 To display a preview of the table, use preview
tData=readtable('data.csv',opt)
tData = 1×4 table
second Volt Volt_1 Ampere ______ ____ ______ ______ 1 2 4 45
opt=detectImportOptions('data.csv')
opt =
DelimitedTextImportOptions with properties: Format Properties: Delimiter: {','} Whitespace: '\b\t ' LineEnding: {'\n' '\r' '\r\n'} CommentStyle: {} ConsecutiveDelimitersRule: 'split' LeadingDelimitersRule: 'keep' TrailingDelimitersRule: 'ignore' EmptyLineRule: 'skip' Encoding: 'UTF-8' Replacement Properties: MissingRule: 'fill' ImportErrorRule: 'fill' ExtraColumnsRule: 'addvars' Variable Import Properties: Set types by name using setvartype VariableNames: {'Var1', 'Var2', 'Var3' ... and 1 more} VariableTypes: {'char', 'double', 'double' ... and 1 more} SelectedVariableNames: {'Var1', 'Var2', 'Var3' ... and 1 more} VariableOptions: [1-by-4 matlab.io.VariableImportOptions] Access VariableOptions sub-properties using setvaropts/getvaropts VariableNamingRule: 'modify' Location Properties: DataLines: [1 Inf] VariableNamesLine: 0 RowNamesColumn: 0 VariableUnitsLine: 0 VariableDescriptionsLine: 0 To display a preview of the table, use preview
opt.DataLines=3;
opt.VariableNamesLine=2;
opt.VariableTypes=repmat({'double'},1,4);
tData=readtable('data.csv',opt)
tData = 1×4 table
second Volt Volt_1 Ampere ______ ____ ______ ______ 1 2 4 45
If know there is a header line, it's better to use that information first; that gives detectImportOptions a lot better chancee to interpret the file as intended, rather than how it actually is.
Using the opt struct returned without the aid of the '[Num]HeaderLines' parameter takes several fixups including that the initial variable is detected as being a string rather than numeric; setting the option for the DataLines parameter in the opt struct doesn't correct for the fact that the parsing has already been done without knowing about the header line.

More Answers (1)

Meg Noah
Meg Noah on 6 Aug 2025 at 21:56
filename = 'data.csv';
dataTable = readtable(filename,'NumHeaderLines',1)
dataTable =
1×4 table
second Volt Volt_1 Ampere
______ ____ ______ ______
1 2 4 45
  7 Comments
Meg Noah
Meg Noah on 7 Aug 2025 at 20:43
@Walter Roberson OK - now I know where to look! On my browser, it is way down and doesn't display unless I scroll down to it. Too many 'See Alsos...' and 'Categories...'.
dpb
dpb on 8 Aug 2025 at 13:42
Edited: dpb on 8 Aug 2025 at 17:32
"...it is way down and doesn't display unless I scroll down to it. Too many 'See Alsos...' and 'Categories...'. "
Agreed. There's way too much wasted white space even in "compact" view.
At a minimum, the Tags and Release ought to be at the top with the Q?; "See Also"(*) and the advertising content can follow.
(*) If it were more smarter, it might make at least a little sense, but it's so often so far off-base as to be worse than none. Just looked at the top link in the other thread about Desktop Layout with R2025a -- the thread is dated 2011.

Sign in to comment.

Products


Release

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!