【发布时间】:2020-05-02 07:44:53
【问题描述】:
我正在处理一个充满一些错误的数据集。
在这个数据集中,我想清除很多像 0xFFFF 这样的错误值。清理此数据集并获得一些连贯值的最有效方法是什么?
我试过df = df.apply(lambda x: pd.to_numeric(x,errors = 'coerce'))
但是还有另一个问题,例如,1 月有 31 天,2 月有 28 天,所以 2 月 29/30/31 日的行已经填充了“NaN”。
我的目标是检查一行是否不是数字(如 0XFFFF)并通过连贯的方式更改此值(如最后两个值和下两个值的平均值)
清除数据:
January February March April May june July August
0 -5 -7.0 -7 2.0 12 17 20 20
1 -6 -6.0 -8 3.0 14 16 20 19
2 -5 -5.0 -5 4.0 15 17 17 19
3 -3 -6.0 -3 6.0 16 14 18 18
4 -6 -8.0 -2 4.0 13 15 17 17
5 -11 -9.0 1 5.0 12 17 17 18
6 -6 5.0 2 4.0 8 17 16 16
7 -8 -11.0 1 6.0 7 15 17 17
8 -11 -12.0 1 7.0 6 14 17 15
9 -8 -9.0 2 7.0 5 Sun 15 14
10 -8 -6.0 1 8.0 5 14 15 14
11 -8 -5.0 3 8.0 6 13 16 15
12 -8 -4.0 5 9.0 8 11 16 15
13 -10 1.0 5 10.0 10 14 13 15
14 -10 3.0 7 8.0 12 15 14 48
15 -9 -9.0 0xFFFF 8.0 13 15 -6 18
16 -6 -6.0 2 9.0 14 15 15 19
17 -6 -6.0 -1 11.0 13 17 15 21
18 -4 -4.0 -2 10.0 15 16 15 24
19 -8 2.0 -1 11.0 15 19 17 21
20 -9 3.0 0 12.0 15 20 18 21
21 -14 1.0 1 9.0 18 19 19 26
22 -15 -3.0 2 7.0 18 20 0xFFFF 17
23 -17 -4.0 3 8.0 16 22 24 18
24 -19 -6.0 4 8.0 15 22 23 17
25 -23 -8.0 3 6.0 16 21 26 17
26 -8 -8.0 4 9.0 16 22 26 16
27 -9 -11.0 5 11.0 17 21 21 17
28 -5 NaN 5 14.0 16 21 22 17
29 -6 NaN 3 16.0 17 17 23 18
30 -7 NaN 3 NaN 17 NaN 21 17
下班后的预期输出(NaN 必须保留,但所有其他必须改变(不是数值)):
January February March April May june July August \
0 -5 -7.0 -7 2.0 12 17 20 20
1 -6 -6.0 -8 3.0 14 16 20 19
2 -5 -5.0 -5 4.0 15 17 17 19
3 -3 -6.0 -3 6.0 16 14 18 18
4 -6 -8.0 -2 4.0 13 15 17 17
5 -11 -9.0 1 5.0 12 17 17 18
6 -6 5.0 2 4.0 8 17 16 16
7 -8 -11.0 1 6.0 7 15 17 17
8 -11 -12.0 1 7.0 6 14 17 15
9 -8 -9.0 2 7.0 5 14 15 14
10 -8 -6.0 1 8.0 5 14 15 14
11 -8 -5.0 3 8.0 6 13 16 15
12 -8 -4.0 5 9.0 8 11 16 15
13 -10 1.0 5 10.0 10 14 13 15
14 -10 3.0 7 8.0 12 15 14 48
15 -9 -9.0 4.5 8.0 13 15 -6 18
16 -6 -6.0 2 9.0 14 15 15 19
17 -6 -6.0 -1 11.0 13 17 15 21
18 -4 -4.0 -2 10.0 15 16 15 24
19 -8 2.0 -1 11.0 15 19 17 21
20 -9 3.0 0 12.0 15 20 18 21
21 -14 1.0 1 9.0 18 19 19 26
22 -15 -3.0 2 7.0 18 20 19 17
23 -17 -4.0 3 8.0 16 22 24 18
24 -19 -6.0 4 8.0 15 22 23 17
25 -23 -8.0 3 6.0 16 21 26 17
26 -8 -8.0 4 9.0 16 22 26 16
27 -9 -11.0 5 11.0 17 21 21 17
28 -5 NaN 5 14.0 16 21 22 17
29 -6 NaN 3 16.0 17 17 23 18
30 -7 NaN 3 NaN 17 NaN 21 17
谢谢!
【问题讨论】:
-
这完全取决于您如何描述问题所在。如果长度大于2,那是错误的吗?如果有一个“X”?
-
您是否只希望列中出现数字?还有清理,你的意思是删除整行或替换为
NaN?
标签: python pandas numpy dataset