matlab把全是na值的列删除,清除表中的杂乱数据和缺失数据

加载样本数据

从一个逗号分隔的文本文件 messy.csv 加载样本数据。该文件包含许多不同的缺失数据指示符:

空字符向量 ('')

句点 (.)

NA

NaN

-99

要指定将视为空值的字符向量,请将 'TreatAsEmpty' 名称-值对组参数与 readtable 函数结合使用。(您可以使用 disp 函数来显示全部 21 行,即使以实时脚本方式运行此示例时也可以如此操作。)

T = readtable('messy.csv','TreatAsEmpty',{'.','NA'});

disp(T)

A B C D E

________ ____ __________ ____ ____

{'afe1'} 3 {'yes' } 3 3

{'egh3'} NaN {'no' } 7 7

{'wth4'} 3 {'yes' } 3 3

{'atn2'} 23 {'no' } 23 23

{'arg1'} 5 {'yes' } 5 5

{'jre3'} 34.6 {'yes' } 34.6 34.6

{'wen9'} 234 {'yes' } 234 234

{'ple2'} 2 {'no' } 2 2

{'dbo8'} 5 {'no' } 5 5

{'oii4'} 5 {'yes' } 5 5

{'wnk3'} 245 {'yes' } 245 245

{'abk6'} 563 {0x0 char} 563 563

{'pnj5'} 463 {'no' } 463 463

{'wnn3'} 6 {'no' } 6 6

{'oks9'} 23 {'yes' } 23 23

{'wba3'} NaN {'yes' } NaN 14

{'pkn4'} 2 {'no' } 2 2

{'adw3'} 22 {'no' } 22 22

{'poj2'} -99 {'yes' } -99 -99

{'bas8'} 23 {'no' } 23 23

{'gry5'} NaN {'yes' } NaN 21

T 是一个包含 21 行和 5 个变量的表。'TreatAsEmpty' 仅适用于文件中的数值列,无法处理指定为文本形式的数值(例如 '-99')。

汇总表

使用 summary 函数创建汇总表来查看每个变量的数据类型、说明、单位和其他描述性统计量。

summary(T)

Variables:

A: 21x1 cell array of character vectors

B: 21x1 double

Values:

Min -99

Median 14

Max 563

NumMissing 3

C: 21x1 cell array of character vectors

D: 21x1 double

Values:

Min -99

Median 7

Max 563

NumMissing 2

E: 21x1 double

Values:

Min -99

Median 14

Max 563

当从文件中导入数据时,默认情况是让 readtable 以字符向量元胞数组形式读取包含非数值元素的任何变量。

查找具有缺失值的行

显示表 T 中至少具有一个缺失值的行子集。

TF = ismissing(T,{'' '.' 'NA' NaN -99});

rowsWithMissing = T(any(TF,2),:);

disp(rowsWithMissing)

A B C D E

________ ___ __________ ___ ___

{'egh3'} NaN {'no' } 7 7

{'abk6'} 563 {0x0 char} 563 563

{'wba3'} NaN {'yes' } NaN 14

{'poj2'} -99 {'yes' } -99 -99

{'gry5'} NaN {'yes' } NaN 21

readtable 已将数值变量 B、D 和 E 中的 '.' 和 'NA' 替换为 NaN。

替换缺失值指示符

清除相应数据,以将代码 -99 所指示的缺失值替换为标准的 MATLAB® 数值缺失值指示符 NaN。

T = standardizeMissing(T,-99);

disp(T)

A B C D E

________ ____ __________ ____ ____

{'afe1'} 3 {'yes' } 3 3

{'egh3'} NaN {'no' } 7 7

{'wth4'} 3 {'yes' } 3 3

{'atn2'} 23 {'no' } 23 23

{'arg1'} 5 {'yes' } 5 5

{'jre3'} 34.6 {'yes' } 34.6 34.6

{'wen9'} 234 {'yes' } 234 234

{'ple2'} 2 {'no' } 2 2

{'dbo8'} 5 {'no' } 5 5

{'oii4'} 5 {'yes' } 5 5

{'wnk3'} 245 {'yes' } 245 245

{'abk6'} 563 {0x0 char} 563 563

{'pnj5'} 463 {'no' } 463 463

{'wnn3'} 6 {'no' } 6 6

{'oks9'} 23 {'yes' } 23 23

{'wba3'} NaN {'yes' } NaN 14

{'pkn4'} 2 {'no' } 2 2

{'adw3'} 22 {'no' } 22 22

{'poj2'} NaN {'yes' } NaN NaN

{'bas8'} 23 {'no' } 23 23

{'gry5'} NaN {'yes' } NaN 21

standardizeMissing 将三个 -99 替换为 NaN。

创建一个新表 T2,然后将缺失值替换为该表的前一行中的值。fillmissing 提供了许多方法来填充缺失值。

T2 = fillmissing(T,'previous');

disp(T2)

A B C D E

________ ____ _______ ____ ____

{'afe1'} 3 {'yes'} 3 3

{'egh3'} 3 {'no' } 7 7

{'wth4'} 3 {'yes'} 3 3

{'atn2'} 23 {'no' } 23 23

{'arg1'} 5 {'yes'} 5 5

{'jre3'} 34.6 {'yes'} 34.6 34.6

{'wen9'} 234 {'yes'} 234 234

{'ple2'} 2 {'no' } 2 2

{'dbo8'} 5 {'no' } 5 5

{'oii4'} 5 {'yes'} 5 5

{'wnk3'} 245 {'yes'} 245 245

{'abk6'} 563 {'yes'} 563 563

{'pnj5'} 463 {'no' } 463 463

{'wnn3'} 6 {'no' } 6 6

{'oks9'} 23 {'yes'} 23 23

{'wba3'} 23 {'yes'} 23 14

{'pkn4'} 2 {'no' } 2 2

{'adw3'} 22 {'no' } 22 22

{'poj2'} 22 {'yes'} 22 22

{'bas8'} 23 {'no' } 23 23

{'gry5'} 23 {'yes'} 23 21

删除具有缺失值的行

创建一个新表 T3,该表仅包含 T 中不带缺失值的行。T3 只有 16 行。

T3 = rmmissing(T);

disp(T3)

A B C D E

________ ____ _______ ____ ____

{'afe1'} 3 {'yes'} 3 3

{'wth4'} 3 {'yes'} 3 3

{'atn2'} 23 {'no' } 23 23

{'arg1'} 5 {'yes'} 5 5

{'jre3'} 34.6 {'yes'} 34.6 34.6

{'wen9'} 234 {'yes'} 234 234

{'ple2'} 2 {'no' } 2 2

{'dbo8'} 5 {'no' } 5 5

{'oii4'} 5 {'yes'} 5 5

{'wnk3'} 245 {'yes'} 245 245

{'pnj5'} 463 {'no' } 463 463

{'wnn3'} 6 {'no' } 6 6

{'oks9'} 23 {'yes'} 23 23

{'pkn4'} 2 {'no' } 2 2

{'adw3'} 22 {'no' } 22 22

{'bas8'} 23 {'no' } 23 23

T3 包含 16 行和 5 个变量。

组织数据

先根据 C 以降序对 T3 的行进行排序,然后根据 A 以升序排序。

T3 = sortrows(T2,{'C','A'},{'descend','ascend'});

disp(T3)

A B C D E

________ ____ _______ ____ ____

{'abk6'} 563 {'yes'} 563 563

{'afe1'} 3 {'yes'} 3 3

{'arg1'} 5 {'yes'} 5 5

{'gry5'} 23 {'yes'} 23 21

{'jre3'} 34.6 {'yes'} 34.6 34.6

{'oii4'} 5 {'yes'} 5 5

{'oks9'} 23 {'yes'} 23 23

{'poj2'} 22 {'yes'} 22 22

{'wba3'} 23 {'yes'} 23 14

{'wen9'} 234 {'yes'} 234 234

{'wnk3'} 245 {'yes'} 245 245

{'wth4'} 3 {'yes'} 3 3

{'adw3'} 22 {'no' } 22 22

{'atn2'} 23 {'no' } 23 23

{'bas8'} 23 {'no' } 23 23

{'dbo8'} 5 {'no' } 5 5

{'egh3'} 3 {'no' } 7 7

{'pkn4'} 2 {'no' } 2 2

{'ple2'} 2 {'no' } 2 2

{'pnj5'} 463 {'no' } 463 463

{'wnn3'} 6 {'no' } 6 6

在 C 中,各行首先按 'yes' 分组,然后再按 'no' 分组。然后在 A 中,各行以字母顺序排列。

对表进行重新排序,以使 A 和 C 彼此相邻。

T3 = T3(:,{'A','C','B','D','E'});

disp(T3)

A C B D E

________ _______ ____ ____ ____

{'abk6'} {'yes'} 563 563 563

{'afe1'} {'yes'} 3 3 3

{'arg1'} {'yes'} 5 5 5

{'gry5'} {'yes'} 23 23 21

{'jre3'} {'yes'} 34.6 34.6 34.6

{'oii4'} {'yes'} 5 5 5

{'oks9'} {'yes'} 23 23 23

{'poj2'} {'yes'} 22 22 22

{'wba3'} {'yes'} 23 23 14

{'wen9'} {'yes'} 234 234 234

{'wnk3'} {'yes'} 245 245 245

{'wth4'} {'yes'} 3 3 3

{'adw3'} {'no' } 22 22 22

{'atn2'} {'no' } 23 23 23

{'bas8'} {'no' } 23 23 23

{'dbo8'} {'no' } 5 5 5

{'egh3'} {'no' } 3 7 7

{'pkn4'} {'no' } 2 2 2

{'ple2'} {'no' } 2 2 2

{'pnj5'} {'no' } 463 463 463

{'wnn3'} {'no' } 6 6 6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值