我有一個大資料集搞砸了。我試著清理它。資料如下所示:
data= np.array(['0,51\n0,64\n0,76\n0,84\n1,00', 1.36]) #...
我的目標是提取原始數字:
numbers= [51, 64, 76, 84, 100, 136]
我嘗試過的作業,但我認為它不是那么優雅。有更好的方法嗎?
import numpy as np
import re
clean= np.array([])
for i in data:
i = str(i)
if ',' in i:
without= i.replace(',', '')
clean= np.append(clean, without)
elif '.' in i:
without= i.replace('.', '')
clean= np.append(clean, without)
#detect all numbers
numbers= np.array([])
for i in clean:
if type(i) == np.str_:
a= re.findall(r'\b\d \b', i)
numbers= np.append(numbers, a)
uj5u.com熱心網友回復:
通常,您永遠不應該np.append在回圈中使用,因為它每次都會重新創建一個新陣列,從而導致效率低下的二次復雜度。
除此之外,您可以使用以下單線來解決您的問題:
result = [int(float(n.replace(',', '.'))*100) for e in data for n in e.split()]
這個想法是,用 a替換.,然后將字串決議為浮點數,以便基于此生成正確的整數。您可以將其轉換為 numpy 陣列np.fromiter(result, dtype=int)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/463178.html
上一篇:每個零值后的Pandas常量值
下一篇:多維矩陣向量積
