我正在嘗試使用 Pandas 從特定列中洗掉所有非數字值:

(a) 我想將所有最后一列值更改為浮動。我想保留為浮點數的列中有一些非零數值。
(b) 如果存在非數字值,我想將它們全部替換為 0.0(浮點數)。比如第247行,最后一列有“a”,我想把它改成0.0。
我試過了:
def isnumber(x):
try:
float(x)
return True
except:
return False
df = pd.read_csv(filename)
df = df[clean_up.applymap(isnumber)]
然而,這會改變每一列:

uj5u.com熱心網友回復:
首先,您應該使用header=None,skipinitialspace=True和quoting=1作為引數讀取您的 csv 檔案,read_csv因為您的標題看起來像一個普通行,每個欄位分隔符后面都有空格,并且您有一些用雙引號括起來的值。
要轉換最后一列,請使用pd.numeric:
df = pd.read_csv('tubedata.csv', header=None, quoting=1, skipinitialspace=True)
df[5] = pd.to_numeric(df[5], errors='coerce').fillna(0)
輸出:
# Before conversion
>>> df[5].unique()
array(['0', '3', '2', '4', '6', 'a'], dtype=object)
# After conversion
>>> df[5].unique()
array([0., 3., 2., 4., 6.])
uj5u.com熱心網友回復:
您可以pd.to_numeric通過將其映射到DataFrame. 使用errors='coerce'無法轉換為的轉列,NaN因此可以在以下步驟中輕松洗掉它們:
df.apply(pd.to_numeric, errors='coerce').dropna(axis=1)
要允許"a"在其他數字的列中使用錯誤值(例如),請fillna改用:
pd.to_numeric(df['some column'], errors='coerce').fillna(0.0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362545.html
