簡體   English   中英

Python如何將float轉換為十六進制到十進制

[英]Python How to convert a float as hex to decimal

我已經從帶有pandas的csv文件中讀取了一些數據。 數據不完整,因此包含許多納米值。 我想在數據中添加一列,將十六進制值轉換為十進制值。 不幸的是,具有十六進制值的列都被讀取為浮點數,而不是字符串,因為它們恰好具有這些值。 示例數據

   val
0 20.0
1  nan
2 20.0

在python中將十六進制轉換為十進制的簡單方法似乎是: int('20.0',16) ,它應該產生32

但是,由於這是pandas,我無法將值轉換為int,或者至少我不斷收到錯誤說明。 我目前的代碼是:

df['valdec'] = np.where(np.isnan(df['val']), 
                    df['val'], 
                    int(df['val'].astype(int).astype(str), 16))

這失敗並出現錯誤:

ValueError:無法將NA轉換為整數

如果沒有astype(int)則值為"20.0" ,無法轉換。 還有另一種方法可以將浮點值解釋為十六進制值,並在使用pandas數據幀時轉換為十進制嗎?

您可以屏蔽感興趣的行並進行雙重投射並調用apply

In [126]:
df['valdec'] = df['val'].dropna().astype(int).astype(str).apply(lambda x: int(x, 16))
df

Out[126]:
    val  valdec
0  20.0    32.0
1   NaN     NaN
2  20.0    32.0

所以,首先我們稱之為dropna刪除NaN ,這讓我們投來int使用.astype(int)然后將轉換為str調用.astype(str)

然后我們調用apply來轉換為十六進制並將所有這些結果分配給新列

請注意,新列的dtype將為float因為NaN的存在強制執行此操作,您將無法混合使用intfloat s

正如@jasonharper所指出的那樣,在這里轉換為int將丟失任何小數部分,因此使用float.fromhex的更高精度方法:

In [128]:
df['valdec'] = df['val'].astype(str).dropna().apply(lambda x: float.fromhex(x))
df

Out[128]:
    val  valdec
0  20.0    32.0
1   NaN     NaN
2  20.0    32.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM