我必须替换值吗?使用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
为什么?
答案 0 :(得分:2)
# a dataframe with string values
dat = pd.DataFrame({'a':[1,'FG', 2, 4], 'b':[2, 5, 'NA', 7]})
从数据框中删除非数字元素:
"Method 1 - with regex"
dat2 = dat.replace(r'^([A-Za-z]|[0-9]|_)+$', np.NaN, regex=True)
dat2
"Method 2 - with pd.to_numeric"
dat3 = pd.DataFrame()
for col in dat.columns:
dat3[col] = pd.to_numeric(dat[col], errors='coerce')
dat3
答案 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)