2015-03-25 15 views
6

Ben pandalarda yeniyim, csv'yi Dataframe'e yüklemeye çalışıyorum. Verilerim olarak temsil edilen değerler eksik mi? ve standart Missing değerleri ile değiştirmeye çalışıyorum - NaNPandalar Nasıl Değiştirilir? NaN ile - standart olmayan eksik değerlerin işlenmesi

Lütfen bana yardımcı olun. Pandalar dokümanlarını okumaya çalıştım, ancak takip edemiyorum.

def readData(filename): 
    DataLabels =["age", "workclass", "fnlwgt", "education", "education-num", "marital-status", 
       "occupation", "relationship", "race", "sex", "capital-gain", 
       "capital-loss", "hours-per-week", "native-country", "class"] 

    # ==== trying to replace ? with Nan using na_values 
    rawfile = pd.read_csv(filename, header=None, names=DataLabels, na_values=["?"]) 
    age = rawfile["age"] 
    print age 
    print rawfile[25:40] 

    #========trying to replace ? 
    rawfile.replace("?", "NaN") 
    print rawfile[25:40] 

The Snap shot of the data

+1

Yine şaşırtıcı read_csv' 'argüman işe yaramadı

bu şekilde çizgiyi değiştirirseniz

. Değer aslında olduğunda bir başarısızlık yaşadım '? 've ben sadece işaret ediyordum'? ' NaN olarak. – cphlewis

+0

Sadece bu sütunda veya başka konumlarda '?' Var mı? – EdChum

+0

'read_csv' bu değeri yukarı çıkarmadı, hatayı yeniden üretmek için ham girdi verilerini yayınlayabilir misiniz, bu sütun – EdChum

cevap

21

Sadece f bunun yerini alabilir veya bu sütun replace kullanarak:

df.replace('?', np.NaN) 

GÜNCELLEME Eğer bir ayırıcı geçemiyor eğer varsayılan olarak, sorununuzu anladım Tamam

:

df['workclass'].replace('?', np.NaN) 

veya bütün df

Karakter read_csv, ayırıcı olarak virgül ',' kullanacaktır. Eğer sorunlu bir çizgi var

Kişisel verilerin ve özellikle bir örnekte:

Eğer na_value=['?'] bu çünkü tüm eşleşmedi geçtiğinde
54, ?, 180211, Some-college, 10, Married-civ-spouse, ?, Husband, Asian-Pac-Islander, Male, 0, 0, 60, South, >50K 

böylece aslında bir virgül ve ayırıcı olarak bir boşluk vardır senin Değerlerin hepsinin önünde gözlemleyemediğiniz bir boşluk karakteri vardır.

rawfile = pd.read_csv(filename, header=None, names=DataLabels, sep=',\s', na_values=["?"]) 

sonra bunu tüm eserlerini bulmak gerekir:

27  54    NaN 180211 Some-college    10 
1

Kullanım numpy.nan

Numpy - Replace a number with NaN

import numpy as np 
df.applymap(lambda x: np.nan if x == '?' else x) 
+0

Teşekkürler Liam, hızlı bir cevap için, bunu deneyeceğim. –

1

ben bunu hallediyoruz:

#========trying to replace ? 
    newraw= rawfile.replace('[?]', np.nan, regex=True) 
    print newraw[25:40] 
İlgili konular