如何得到十进制数小数部分的第一位数?

2024-05-08 04:38:09 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的熊猫中,数据是这样的:
enter image description here

(原始数据类似于2.1, 3.7, 5.6,后面没有0。)

我想看看小数部分第一位数的分布。(即6 for 4.6)。我该怎么做?在

我考虑过15.1 % 1,但它返回0.09999999999999964。在


Tags: 数据for原始数据小数
2条回答

你可以试试:

int(str(x).split('.')[1][0])

这将转换为一个字符串,在上拆分。取第二部分的第一个字符,然后把它变成一个整数。得到奇怪值的原因是0.1在二进制中是一个无理数。在

您还可以使用:

^{pr2}$

这将确保您有一个整数(您可能还需要使用math.round)。在

例如:

>>> pf = pandas.DataFrame([0.5, 4.6, 7.2, 9.8, 36.0])
>>> pf
      0
0   0.5
1   4.6
2   7.2
3   9.8
4  36.0
>>> pf[0]
0     0.5
1     4.6
2     7.2
3     9.8
4    36.0
Name: 0, dtype: float64
>>> pf.apply(lambda x: int(x[0]*10.0)%10)
0    5
dtype: int64
>>> pf.apply(lambda x: int(x[0]*10.0)%10, 1)
0    5
1    6
2    2
3    8
4    0
dtype: int64
>>>

关于-ve编号的测试:

>>> pf = pandas.DataFrame([0.5, 4.6, 7.2, -9.8, 36.0])
>>> df = pf.apply(lambda x: int(x[0]*10.0)%10, 1)
>>> df
0    5
1    6
2    2
3    2
4    0
dtype: int64
>>> df = pf.apply(lambda x: int(abs(x[0])*10.0)%10, 1)
>>> df
0    5
1    6
2    2
3    8
4    0
dtype: int64
>>>

所以我们的最终答案是:

pf.apply(lambda x: int(abs(x[0])*10.0)%10, 1)

我还尝试了字符串方法:

>>> pf.apply(lambda x:int(str(x[0]).split('.')[1][0]), 1)
0    5
1    6
2    2
3    8
4    0
dtype: int64

对于正数,可以先用乘法,然后用模。在

x = 15.6
x *= 10 # 156
x %= 10 # 6

如果是阴性

^{pr2}$

一个比poke建议的干净得多的方法。在

abs(x * 10) % 10

如果您有一个名为df的数据帧,可以这样括起来:

df.apply( lambda x: abs(x * 10) % 10 )

相关问题 更多 >