如何替换数据框中某个字符的所有实例?

时间:2017-05-25 09:04:06

标签: python pandas dataframe

我有一个数据框,其中有很多'?'的实例在不同的行。列的数据类型是“对象”。    现在我要替换所有'?' 0。 我该怎么做?

2 个答案:

答案 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

maskwhere

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)

我认为更好replacestring 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