熊猫如何更换?使用NaN - 处理非标准缺失值

swa*_*oji 10 python pandas

我是pandas的新手,我正在尝试在Dataframe中加载csv.我的数据缺失值表示为?,我试图用标准的缺失值替换它 - NaN

请帮助我.我曾尝试阅读Pandas文档,但我无法遵循.

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]
Run Code Online (Sandbox Code Playgroud)

Snap拍摄的数据

EdC*_*ica 34

您可以使用以下内容替换此列replace:

df['workclass'].replace('?', np.NaN)
Run Code Online (Sandbox Code Playgroud)

或整个df:

df.replace('?', np.NaN)
Run Code Online (Sandbox Code Playgroud)

UPDATE

好的我找出了你的问题,默认情况下,如果你没有传递一个分隔符,那么read_csv将使用逗号','作为分隔符.

您的数据,特别是您遇到问题的一个示例:

54, ?, 180211, Some-college, 10, Married-civ-spouse, ?, Husband, Asian-Pac-Islander, Male, 0, 0, 60, South, >50K
Run Code Online (Sandbox Code Playgroud)

实际上有一个逗号和一个空格作为分隔符,所以当你传递na_value=['?']它时不匹配,因为你所有的值前面都有一个空格字符,你无法观察到它们.

如果你改变你的行:

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

然后你应该发现它一切正常:

27      54               NaN  180211  Some-college             10 
Run Code Online (Sandbox Code Playgroud)

  • 重要的是要提到 `df.replace()` 默认不是 **inplace** 函数。如果您想在源数据框中进行更改,有两种方法:`df = df.replace('?', np.NaN)` 或 `df.replace('?', np.NaN, inplace=True)` (4认同)