我有以下串列:
l = ['AB', '27.0', '30.5', '28', '31', 'CD', '29']
我想把每個數值變成float和每個string變成np.nan.
到目前為止,我的嘗試失敗了,因為float('AB')顯然無法計算:
result = [float(i) if isinstance(float(i), float) else np.nan for i in l]
期望的結果是:
result = [np.nan, 27.0, 30.5, 28.0, 31.0, np.nan, 29.0]
你建議我應該怎么做?
uj5u.com熱心網友回復:
如果數字是整數,如您的示例中所示:
result = [ float(i) if i.isdigit() else np.nan for i in l ]
uj5u.com熱心網友回復:
使用“請求原諒比請求許可更容易”原則的 Python 理想:
EAFP:請求寬恕比請求許可更容易。這種常見的 Python 編碼風格假設存在有效的鍵或屬性,如果假設被證明是錯誤的,則捕獲例外。這種干凈快速的風格的特點是存在許多 try 和 except 陳述句。該技術與許多其他語言(如 C)常見的 LBYL 風格形成鮮明對比。
這避免了例如正則運算式搜索的額外開銷,并且可以在您的輸入中使用浮點數和整數:
def to_float(value: str):
try:
return float(value)
except ValueError:
return np.nan
result = [to_float(value) for value in l]
uj5u.com熱心網友回復:
改用re.search:
result = [float(i) if re.search(r'^\d (?:\.\d )?$', i) else np.nan for i in l]
uj5u.com熱心網友回復:
如果我理解正確,您只需要查找字串是否為數字即可。如果它的數字我們改變為浮動,否則我們給它 np.nan
所以我們可以像這樣解決問題:
y = []
for x in l:
if x.isnumeric():
x = float(x)
y.append(x)
else:
x=np.nan
y.append(x)
編輯:
我們也可以解決這個問題,我們檢查字串是否是字母的反向方式所以代碼看起來像這樣:
z = []
for x in l:
if x.isalpha():
x = np.nan
z.append(x)
else:
x = float(x)
z.append(x)
print(z)
我得到的結果是:
[nan, 27.0, 30.5, 28.0, 31.0, nan, 29.0]
希望這可以幫助
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/418895.html
標籤:
上一篇:洗掉R中字符后的空格?[復制]
