2017-07-31 72 views
1

我有一個包含約80個特徵的.txt數據集,其中看起來"NA"被用作缺失值的指標以及特定的實際值序串特點,如:作爲缺失值和有序特徵值處理「NA」

enter image description here

什麼是處理這個問題的最好方法?

默認情況下,熊貓將這些"NA"值轉換爲"nan"。我讀了如何通過從列表中刪除na_vals"NA"因此停止這樣的:

na_vals = ['-1.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN', '#N/A', 'N/A', 'NA', '#NA', 'NULL', 'NaN', '-NaN', 'nan', '-nan'] 
na_vals.remove("NA") 
data = pd.read_table('data/AmesHousing.txt', delimiter="\t", keep_default_na=False, na_values=na_vals) 

但後來,我應該手動"nan"替換"NA"值爲每個功能對於這"NA"不是可能的價值?如果是這樣,這是如何完成的?如果沒有,那麼這樣做的更好方法是什麼?謝謝!

編輯:我要澄清,我做了"NA"也用於遺漏值的假設,因爲如果我從na_values列表中刪除"NA"data.isnull().sum().sum()回報0。所以我猜想我的假設是正確的,或者在整個數據集中實際上沒有缺失值。我不知道如何確定這些是真的。 The dataset description page can be found here.

+0

我不認爲這可以很容易地完成,除非你有一個明確的算法,它可以區分哪個'NA'是'沒有Basement'和哪個是'NaN'。如果您可以使用不同的值來顯示'NaN' - 那麼您可以輕鬆解決這個問題。作爲最後的手段,你可以嘗試建立一個神經網絡並進行訓練,但我不確定它是否值得... ;-) – MaxU

+0

@MaxU我的解決方案涉及一個帶有長度爲零的隱藏層的神經網絡( - : – piRSquared

回答

2

Jupyter我使用%%writefile魔法來設置測試文件。如果您已經有一個文件,這不是必需的。

%%writefile test.csv 
col1,col2,col3 
Ex,1.,2. 
Gd,3.,4. 
TA,5.,NA 
NA,6.,7. 

解決方案
解析兩次,要求我知道有合法'NA'值的列的名稱。確保使用與您相關的列名填充列表。

cols_with_legit_NA = ['col1'] 

legit_df = pd.read_csv(
    'test.csv', 
    usecols=cols_with_legit_NA, 
    keep_default_na=False 
) 
df = pd.read_csv('test.csv').assign(**legit_df) 

df 

    col1 col2 col3 
0 Ex 1.0 2.0 
1 Gd 3.0 4.0 
2 TA 5.0 NaN 
3 NA 6.0 7.0 
+0

您使用了'%% writefile'而不是'%% writefill',並且我通過盲目複製而意外刪除了我的數據集,好東西我有備份; p – Austin

+1

如果您已經有'test.csv' ...選擇另一個文件名稱( - : – piRSquared

+0

嗯好吧,所以似乎錯字是我期望的相反,第一個代碼塊完成什麼? – Austin