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

时间:2015-03-25 04:52:33

标签: 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]

The Snap shot of the data

6 个答案:

答案 0 :(得分:33)

您可以使用replace

为该列替换此列
df['workclass'].replace('?', np.NaN)

或整个df:

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

<强>更新

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

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

54, ?, 180211, Some-college, 10, Married-civ-spouse, ?, Husband, Asian-Pac-Islander, Male, 0, 0, 60, South, >50K

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

如果您将行更改为:

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

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

27      54               NaN  180211  Some-college             10 

答案 1 :(得分:1)

使用numpy.nan

Numpy - Replace a number with NaN

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

答案 2 :(得分:1)

好吧,我明白了:

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

答案 3 :(得分:1)

df=df.replace({'?':np.NaN})

使用字典将所有值替换为NaN

答案 4 :(得分:0)

有时,?会带有空格。在由诸如informatica或HANA之类的系统生成的文件中

首先,您需要在DataFrame中去除空白

temp_df_trimmed = temp_df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)

然后再应用该功能替换数据

temp_df_trimmed['RC'] = temp_df_trimmed['RC'].map(lambda x: np.nan if x=="?"  else x)

答案 5 :(得分:0)

人们有很多方法,这是最好的,如果您发现CSV文件中包含NAN等任何对象(例如“丢失”),请使用

    rawfile = pd.read_csv("Property_train.csv", na_values=["missing"])