在熊猫数据框中将字符串值替换为NaN-Python

时间:2018-12-07 11:14:49

标签: pandas dataframe missing-data

我必须替换值吗?使用NaN,因此您可以调用.isnull()方法。我找到了几种解决方案,但总是会返回一些错误。假设:

data = pd.DataFrame([[1,?,5],[?,?,4],[?,32.1,1]])

如果我尝试:

pd.data.replace('?', np.nan)

我有:

     0     1  2
0  1.0   NaN  5
1  NaN   NaN  4
2  NaN  32.1  1    

但是data.isnull()返回:

       0      1      2
0  False  False  False
1  False  False  False
2  False  False  False

为什么?

4 个答案:

答案 0 :(得分:2)

# a dataframe with string values
dat = pd.DataFrame({'a':[1,'FG', 2, 4], 'b':[2, 5, 'NA', 7]})

enter image description here

从数据框中删除非数字元素:

"Method 1 - with regex"
dat2 = dat.replace(r'^([A-Za-z]|[0-9]|_)+$', np.NaN, regex=True)
dat2

enter image description here

"Method 2 - with pd.to_numeric"
dat3 = pd.DataFrame()
for col in dat.columns:
    dat3[col] = pd.to_numeric(dat[col], errors='coerce')
dat3

enter image description here

答案 1 :(得分:0)

我认为您忘记分配回去了

data = pd.DataFrame([[1,'?',5],['?','?',4],['?',32.1,1]])

data = data.replace('?', np.nan)
#alternative
#data.replace('?', np.nan, inplace=True)
print (data)
     0     1  2
0  1.0   NaN  5
1  NaN   NaN  4
2  NaN  32.1  1

print (data.isnull())
       0      1      2
0  False   True  False
1   True   True  False
2   True  False  False

答案 2 :(得分:0)

? not null。因此,您有望在False测试下获得isnull

>>> data = pandas.DataFrame([[1,'?',5],['?','?',4],['?',32.1,1]])
>>> data
          0      1      2
   0  False  False  False
   1  False  False  False
   2  False  False  False

?替换为NaN后,测试看起来会大不相同

>>> data = data.replace('?', np.nan)
>>> data
       0      1      2
0  False   True  False
1   True   True  False
2   True  False  False

答案 3 :(得分:0)

我相信您在执行pd.data.replace('?', np.nan)时未执行此操作,因此您必须尝试-

data = data.replace('?', np.nan)