如何获取小数的小数部分的第一位数?
在我的大熊猫,数据是这样的:
如何获取小数的小数部分的第一位数?
(原始数据就像2.1, 3.7, 5.6
,而0以下。)
我想看到的小数部分的第1位的分布。 (即,6 for 4.6
)。我该怎么做?
我想过15.1 % 1
,但是它会返回0.09999999999999964
。
对于正数,您可以先使用乘法,然后使用模。
x = 15.6
x *= 10 # 156
x %= 10 # 6
如果它们是消极的,
def get(x):
return (x * 10) % 10
x = - 15.6
print get(abs(x))
如捅提出了一个更清洁的方式。
abs(x * 10) % 10
如果你有一个名为DF数据框,可以附上这样的:
df.apply(lambda x: abs(x * 10) % 10)
我其实不是Python开发者。如果你想添加任何细节,你实际上可以编辑我的答案。我非常感激。 –
'abs(x * 10)%10'适用于正数和负数。 – poke
你可以尝试:
int(str(x).split('.')[1][0])
这将转换为字符串,各执。并采取第二部分的第一个字符,然后把它变回一个整数。你得到奇怪值的原因是0.1是二进制的无理数。
您还可以使用:
int(x * 10.0) % 10
这将确保你有一个整数,(你可能需要使用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 * 10)%10'? –
致所有答复者:由于OP提到熊猫,可能需要附上apply/lambda。例如。 'df.apply(lambda x:your_code)'。这对OP来说也更加明显:'df = pd.DataFrame([0.5,4.6,7.2])' – JohnE
@UmaKanth,这真的让人印象深刻...... – cqcn1991