[英]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
的存在強制執行此操作,您將無法混合使用int
和float
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.