2017-05-25 72 views
2

我有一个数据框有很多'?'的实例。在不同的行中。列的数据类型是“对象”。 现在我想要替换所有'?'与0. 我该怎么做?如何替换数据框中某个字符的所有实例?

+0

与此类似:https://stackoverflow.com/questions/29271549/replace-all-occurrences-of-a -string功能于一个数据帧 –

回答

3

考虑数据帧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 

replaceregex=True

df.replace('\?', '0', regex=True) 

    0 1 
0 a0 1 
1 2 0b 
2

我觉得更好的是replacestring0,因为否则得到的混合类型 - 数字与字符串和一些大熊猫功能可以失败:

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 
相关问题