我有一个数据框,其中有很多'?'的实例在不同的行。列的数据类型是“对象”。 现在我要替换所有'?' 0。 我该怎么做?
答案 0 :(得分:5)
考虑数据框df
df = pd.DataFrame([['?', 1], [2, '?']])
print(df)
0 1
0 ? 1
1 2 ?
replace
df.replace('?', 0)
0 1
0 0 1
1 2 0
mask
或where
df.mask(df == '?', 0)
# df.where(df != '?', 0)
0 1
0 0 1
1 2 0
但是,假设您的数据框在较长的字符串中有?
。
df = pd.DataFrame([['a?', 1], [2, '?b']])
print(df)
0 1
0 a? 1
1 2 ?b
replace
regex=True
df.replace('\?', '0', regex=True)
0 1
0 a0 1
1 2 0b
答案 1 :(得分:2)
我认为更好replace
到string
0
,因为其他混合类型 - 带字符串的数字和一些pandas函数可能会失败:
df.replace('?', '0')
此外,如果需要将多个?
替换为0
,请添加+
以匹配一个或多个值:
df = pd.DataFrame([['a???', '?'], ['s?', '???b']])
print(df)
0 1
0 a??? ?
1 s? ???b
df = df.replace('\?+', '0', regex=True)
print (df)
0 1
0 a0 0
1 s0 0b
df = df.replace('[?]+', '0', regex=True)
print (df)
0 1
0 a0 0
1 s0 0b