我对使用 Pandas 进行 Python 转换世界非常陌生!我来这里是为了问一些我自己遇到的代码问题。 就我而言,我使用 python pandas 过滤行值而不消除它们 - 就像只是选择它们而不从该数据框列中的数据框列中删除它们。然而,在该数据帧列中由混合浮点数(超过2位小数的值)和整数(仅包含一位小数,输出为
x.0
)
对于这个数据框列,在 python pandas 数据框中,它默认假设该列的数据类型为 float64
,所以我很难使用 isinstance()
和替代函数/方法来确定/过滤这种类型的混合数据类型列,而无需消除不需要的值
下面是我的数据集的模拟,其结构来自数据框:
data = {
'time: [00.00.01,00.00.02,00.00.03,00.00.04,00.00.05,00.00.06,00.00.07,00.00.08,00.00.09,00.00.10,00.00.11,00.00.12,
00.00.13,00.00.14,00.00.15,00.00.16,00.00.17,00.00.18,00.00.19,00.00.20,00.00.21,00.00.22,00.00.23,00.00.24],
'value': [1.234, 2.345, 3.456, 4.567, 5.678, 6.789,1,2,3,4,5,6,1.234, 2.345, 3.456, 4.567, 5.678, 6.789,1,2,3,4,5,6]
data = pd.DataFrame(data)
当打印为数据框时,数据看起来像:
> time value
1 00.00.1 1.234
2 00.00.2 2.345
3 00.00.3 3.456
4 00.00.4 4.567
5 00.00.5 5.678
6 00.00.6 6.789
7 00.00.7 1.0
8 00.00.8 2.0
9 00.00.9 3.0
10 00.00.10 4.0
11 00.00.11 5.0
12 00.00.12 6.0
13 00.00.13 1.234
14 00.00.14 2.345
15 00.00.15 3.456
16 00.00.16 4.567
17 00.00.17 5.678
18 00.00.18 6.789
19 00.00.19 1.0
20 00.00.10 2.0
21 00.00.21 3.0
22 00.00.22 4.0
23 00.00.23 5.0
24 00.00.24 6.0
我已尝试使用以下解决方案来解决此问题。 -我的解决方案- 这将删除只有一位小数的值,同时保留多于一位小数的值。
value = data[(data['value'].astype(str).str.split('.').str[1].str.len()>1)]
打印输出可能类似于:
> time value
0 00.00.1 1.234
1 00.00.2 2.345
2 00.00.3 3.456
3 00.00.4 4.567
4 00.00.5 5.678
5 00.00.6 6.789
13 00.00.13 1.234
14 00.00.14 2.345
15 00.00.15 3.456
16 00.00.16 4.567
17 00.00.17 5.678
18 00.00.18 6.789
我期望数据帧可以得到这样的结果,而不会消除任何不需要的行值,即使正在经历过滤器以仅选择只有一位小数的值:
> time value
1 00.00.1 1.234
2 00.00.2 2.345
3 00.00.3 3.456
4 00.00.4 4.567
5 00.00.5 5.678
6 00.00.6 6.789
7 00.00.7 1.0
8 00.00.8 2.0
9 00.00.9 3.0
10 00.00.10 4.0
11 00.00.11 5.0
12 00.00.12 6.0
13 00.00.13 1.234
14 00.00.14 2.345
15 00.00.15 3.456
16 00.00.16 4.567
17 00.00.17 5.678
18 00.00.18 6.789
19 00.00.19 1.0
20 00.00.10 2.0
21 00.00.21 3.0
22 00.00.22 4.0
23 00.00.23 5.0
24 00.00.24 6.0
我真的需要你的帮助来解决这个问题,提前致谢!
你想要什么真的不清楚:
过滤行值而不消除它们 - 就像只是选择它们而不从数据框列中删除它们。
在这种情况下,只需使用布尔掩码,而不从数据框中选择数据:
m = data['value'].ne(data['value'].round())
输出:
# boolean mask
>>> m
1 True
2 True
3 True
4 True
5 True
6 True
7 False
8 False
9 False
10 False
11 False
12 False
13 True
14 True
15 True
16 True
17 True
18 True
19 False
20 False
21 False
22 False
23 False
24 False
Name: value, dtype: bool
# selection
>>> data[m]
time value
1 00.00.1 1.234
2 00.00.2 2.345
3 00.00.3 3.456
4 00.00.4 4.567
5 00.00.5 5.678
6 00.00.6 6.789
13 00.00.13 1.234
14 00.00.14 2.345
15 00.00.15 3.456
16 00.00.16 4.567
17 00.00.17 5.678
18 00.00.18 6.789