如何获取小数的小数部分的第一位数?

问题描述:

在我的大熊猫,数据是这样的:
enter image description here如何获取小数的小数部分的第一位数?

(原始数据就像2.1, 3.7, 5.6,而0以下。)

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

我想过15.1 % 1,但是它会返回0.09999999999999964

+4

'(X * 10)%10'? –

+1

致所有答复者:由于OP提到熊猫,可能需要附上apply/lambda。例如。 'df.apply(lambda x:your_code)'。这对OP来说也更加明显:'df = pd.DataFrame([0.5,4.6,7.2])' – JohnE

+0

@UmaKanth,这真的让人印象深刻...... – cqcn1991

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

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) 
+1

我其实不是Python开发者。如果你想添加任何细节,你实际上可以编辑我的答案。我非常感激。 –

+2

'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 
+0

哎呀!更正! –