【问题标题】:How do I trim a csv in Matlab, like I could in bash, in order to load the csv with Matlab's readtable?如何在 Matlab 中修剪 csv,就像在 bash 中一样,以便使用 Matlab 的 readtable 加载 csv?
【发布时间】:2016-12-03 07:42:25
【问题描述】:

需要分析的csv在第一行包含一个无用的标签。

标题位于第二行。

第 102 行及以后的其他无用信息,总计 147 行无用信息,其中包含的列数与其上方的 100 行不同。

相关行包含数值以及偶尔的NaN。 当csv 打开时,它会类似于:

unnecessarily labeled
columnA     columnB     columnC    columnD     columnE
1           2           3          4           5
4           5           6          NaN           8
[...]
301         302         303        304         305
data        that        really     belongs     in       a     separate     csv

csv sample

unnecessarily labeled,,,,,,,,
columnA,columnB,columnC,columnD,columnE,,,,
1,2,3,4,5,,,,
4,5,6,NaN,8,,,,
301,302,303,304,305,,,,
data,that,really,belongs,in,a,separate,csv,

如果我要在 bash 中预处理文件,我会:

sed -e1,1d $f > $processedFilename #remove the top line
head -n -147 $processedFilename > tmp && mv tmp $processedFilename  #remove the last 147 lines

我可以在 Matlab 中进行类似的预处理吗?这可以用readtable 更直接地完成吗?换句话说,我怎样才能将这个csv 数据加载到一个表中,最好是利用自动填充标题并且只有相关的行和列的好处?也就是说,有没有平行的to

T = readtable('patients.xls',... 'Range','C2:E6',...

对于csv 数据?

【问题讨论】:

    标签: bash matlab csv sed


    【解决方案1】:

    Matlab 中没有直接的方法可以跳过文件末尾的行,所以实际上你能做的最多就是读取所有数据,然后删除无关的行/列。

    不过,我们可以通过传递 'HeaderLines' 来指定要在文件开头跳过的行数。

    我想你想要一种在一般情况下适用于这种格式文件的方法;但是,如果您至少知道会有多少列数据,以及最后会有多少无关的行,那么这应该可行:

    x = readtable('file', 'HeaderLines', 1);
    x = x(:, 1:num_columns);
    headers = table2cell(x(1, :));
    x.Properties.VariableNames = headers;
    x = x(2:size(x, 1) - num_extraneous_rows, :);
    

    首先,我们手动选择要包含的列数。 然后,我们设置表的标题。 最后,我们排除了无关的行(以及包含标题的第一行)。

    【讨论】:

    • 使用上面提供的示例数据:>> x=readtable('csvSample.csv', 'HeaderLines', 1);使用 readtable 时出错(第 129 行) 此文件中的数据似乎不是表格的,每行和每列中的字段数相同。您可能需要指定或修改分隔符或标题行数。
    • 上面的错误在第一行添加一个缺少逗号之前和之后都是相同的
    • 这很奇怪...您使用的是哪个版本的 Matlab?我在 2016a,在您的文件中,num_columns = 5 和 num_extraneous_rows = 1,我没有遇到任何问题...puu.sh/qnnBE/417d53e90a.png
    • 2014b。虽然,明天我计划更新到 2016a。尽管如此,向后兼容仍然是相关的。
    • 我可以确认您的代码在 Matlab 2016a 中没有错误,在 2014b 中没有错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多