第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

用浮點(diǎn)數(shù)拆分列并在新列中添加整數(shù)和小數(shù)部分

用浮點(diǎn)數(shù)拆分列并在新列中添加整數(shù)和小數(shù)部分

慕妹3242003 2023-07-18 16:46:06
我有一列(版本號(hào))作為浮點(diǎn)出現(xiàn)超過 200k 次,例如 1.2、0.2 ...我需要將浮點(diǎn)數(shù)字的兩側(cè)求和到一個(gè)新列(總版本)中,以便它在示例中給出3, 2. 只是整數(shù)有什么建議嗎?
查看完整描述

5 回答

?
絕地?zé)o雙

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊

這是一個(gè)應(yīng)該很容易理解的解決方案。我可以制作一個(gè)oneline,你也想要那個(gè)。


mylist = [1.3, 2.6, 3.1]


number = 0

fractions = 0


for a in mylist:

    (a,b)=str(a).split('.')

    number = number + int(a)

    fractions = fractions + int(b)


print ("Number: " + str(number))

print ("Fractions: " + str(fractions))

這給出:


Number: 6

Fractions: 10


查看完整回答
反對(duì) 回復(fù) 2023-07-18
?
30秒到達(dá)戰(zhàn)場(chǎng)

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊

不要使用str(x).split('.')!

一條評(píng)論和另外兩個(gè)答案目前建議使用以下方法獲取數(shù)字的整數(shù)和小數(shù)x部分


i,f = (int(s) for s in str(x).split('.'))

雖然這確實(shí)給出了結(jié)果,但我認(rèn)為這是一個(gè)壞主意。


問題是,如果您期望得到有意義的結(jié)果,則需要顯式指定小數(shù)部分的精度。"1.20"和"1.2"是相同數(shù)字的兩個(gè)字符串表示形式,但20和2是兩個(gè)非常不同的整數(shù)。此外,浮點(diǎn)數(shù)會(huì)受到精度誤差的影響,您很容易會(huì)發(fā)現(xiàn)自己使用的是類似 的數(shù)字"1.19999999999999999999999",它與 之間只有很小的舍入誤差"1.2",但使用這種方法會(huì)產(chǎn)生完全不同的結(jié)果str(x).split('.')。


避免這種混亂行為的一種方法是設(shè)置一個(gè)精度,即小數(shù)位數(shù),并堅(jiān)持下去。例如,在處理貨幣價(jià)值時(shí),我們習(xí)慣于談?wù)摲?;盡管 1.5 歐元和 1.50 歐元在技術(shù)上都是有效的,但您總是會(huì)聽到人們說“一歐元五十”而不是“一歐元五”。如果你聽到有人說“一歐元五”,它實(shí)際上意味著 1.05 歐元。我們總是精確地添加兩位小數(shù)。


通過這種方法,不存在1.2成為(1,2)或(1,20)或的混亂行為(1,1999999999)。如果將小數(shù)位數(shù)固定為 2,則將1.2始終映射到(1,20),就是這樣。


更標(biāo)準(zhǔn)的方式

以下是在 python 中獲取數(shù)字的整數(shù)和小數(shù)部分的兩種標(biāo)準(zhǔn)方法:


x = 1.20


# method 1

i = int(x)

f = x - i

# i = 1 and f = 0.2; i is an int and f a float


# method 2

import math

f, i = math.modf(x)

# i = 1.0 and f = 0.2; i and f are both floats

(編輯:還有第三種方法,pandas 的divmod函數(shù)。請(qǐng)參閱user2314737 的回答。)


完成此操作后,您可以f通過將小數(shù)部分乘以所選的 10 次方并將其轉(zhuǎn)換為整數(shù),將其轉(zhuǎn)換為整數(shù):


f = int(f * 100)

# f = 20

最后,您可以將此方法應(yīng)用于整個(gè)列表:


data = [13.0, 14.20, 12.299, 4.414]


def intfrac_pair(x, decimal_places):

  i = int(x)

  f = int((10**decimal_places) * (x - i))

  return (i, f)


data_as_pairs = [intfrac_pair(x, 2) for x in data]

# = [(13, 0), (14, 20), (12, 30), (4, 41)]


sum_of_integer_parts    = sum(i for i,f in data_as_pairs)  # = 43

sum_of_fractional_parts = sum(f for i,f in data_as_pairs)  # = 91


查看完整回答
反對(duì) 回復(fù) 2023-07-18
?
蕭十郎

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊

divmod您可以在列上使用

df = pd.DataFrame([1.2, 2.3, 3.4, 4.5, 0.1])? ? ? ? ? ? ? ? ? ? ? ? ? ?


df? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

#? ? ? 0

# 0? 1.2

# 1? 2.3

# 2? 3.4

# 3? 4.5

# 4? 0.1


df['i'], df['d'] = df[0].divmod(1)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?


df? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

# Out:?

#? ? ? 0? ? i? ? d

# 0? 1.2? 1.0? 0.2

# 1? 2.3? 2.0? 0.3

# 2? 3.4? 3.0? 0.4

# 3? 4.5? 4.0? 0.5

# 4? 0.1? 0.0? 0.1

要將按行求和為整數(shù)(需要精度p=1,這里我假設(shè)原始浮點(diǎn)數(shù)僅包含一位十進(jìn)制數(shù)字):


p = 1

df['s'] = (df['i']+10**p*df['d'].round(decimals=p)).astype(np.int)


df? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

# Out:?

#? ? ? 0? ? i? ? d? s

# 0? 1.2? 1.0? 0.2? 3

# 1? 2.3? 2.0? 0.3? 5

# 2? 3.4? 3.0? 0.4? 7

# 3? 4.5? 4.0? 0.5? 9

# 4? 0.1? 0.0? 0.1? 1

按列求和:


df.sum()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

# Out:?

# 0? ? 11.5

# i? ? 10.0

# d? ? ?1.5

注意:這僅適用于正整數(shù),例如divmod(-3.4, 1)returns (-4.0, 0.6)。


查看完整回答
反對(duì) 回復(fù) 2023-07-18
?
慕絲7291255

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊

以下應(yīng)該有效:

df['total_number']=[sum([int(i) for i in str(k).split('.')]) for k in df.version_number]


查看完整回答
反對(duì) 回復(fù) 2023-07-18
?
交互式愛情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

謝謝大家。我最終以一種相當(dāng)愚蠢但有效的方式做到了。在分割之前,我將其轉(zhuǎn)換為字符串:

Allfiles['Version'] = Allfiles['Version'].round(3).astype(str)

請(qǐng)注意,我四舍五入為 3 位數(shù)字,因?yàn)橄?2.111 這樣的數(shù)字已轉(zhuǎn)換為 2.11099999999999999999

然后我只是進(jìn)行了拆分,為次要版本創(chuàng)建了一個(gè)新列(并將主要版本放在原始列中)

Allfiles[['Version', 'minor']] = Allfiles['Version'].str.split('.', expand=True)

然后我再次將兩個(gè)文件轉(zhuǎn)換為整數(shù),并在第一列中求和。

Allfiles['Version'] = Allfiles['Version']+Allfiles['minor']

(我的數(shù)據(jù)框名稱是 Allfiles 和列版本,正如您可以想象的那樣。


查看完整回答
反對(duì) 回復(fù) 2023-07-18
  • 5 回答
  • 0 關(guān)注
  • 239 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)