在我的大熊貓,數據是這樣的:
如何獲取小數的小數部分的第一位數?
(原始數據就像2.1, 3.7, 5.6
,而0以下。)
我想看到的小數部分的第1位的分佈。 (即,6 for 4.6
)。我該怎麼做?
我想過15.1 % 1
,但是它會返回0.09999999999999964
。
在我的大熊貓,數據是這樣的:
如何獲取小數的小數部分的第一位數?
(原始數據就像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