如果字符串的一部分匹配,我试图替换整个数据框中的值。我尝试使用df.replace
df.str.contains
等,但是它们都不起作用。这是类似的问题,但它们没有回答我的问题[示例] [1]:
我有这样的datframe: df
Brand 2Brand 3Brand
Audi BMW None of the above
None from list BMW Audi
None None below or above BMW
NaN Audi NaN
我只想替换任何地方都不会出现。
所需的otput是这样的:
Brand 2Brand 3Brand
Audi BMW None
None BMW Audi
None None BMW
NaN Audi NaN
答案 0 :(得分:2)
在DataFrame.mask
中每列中使用Series.str.contains
和DataFrame.apply
,以避免转换可能的None
和NaN
值使用na=False
参数:< / p>
df = df.mask(df.apply(lambda x: x.str.contains('None', na=False)), 'None')
print (df)
Brand 2Brand 3Brand
0 Audi BMW None
1 None BMW Audi
2 None None BMW
编辑:如果可能,某些数字列使用DataFrame.select_dtypes
仅获取字符串列(显然对象吃了字符串),然后将其添加到由DataFrame.reindex
填充的False
的掩码数字列中:>
print (df)
Brand 2Brand 3Brand col
0 Audi BMW None of the above 4
1 None from list BMW Audi 7
2 None None below or above BMW 9
3 NaN Audi NaN 5
mask = (df.select_dtypes(object)
.apply(lambda x: x.str.contains('None', na=False))
.reindex(df.columns, fill_value=False, axis=1))
df = df.mask(mask, None)
print (df)
Brand 2Brand 3Brand col
0 Audi BMW None 4
1 None BMW Audi 7
2 None None BMW 9
3 NaN Audi NaN 5
答案 1 :(得分:1)