python - Pandas:替换字符串列值(等于、包含、大小写)
问题描述
我有如下数据农场。
ID COUNTRY GENDER AGE V1 V2 V3 V4 V5
1 1 1 53 APPLE apple bosck APPLE123 xApple111t
2 2 2 51 BEKO beko SIMSUNG SamsungO123 ttBeko111t
3 3 1 24 SAMSUNG bosch SEMSUNG BOSC1123 uuSAMSUNG111t
如果列表中有相同的值或包含特定值,我想替换为 np.nan。我在下面尝试但出现错误。
remove_list = ['APPLE', 'BEKO']
remove_contain_list = ['SUNG', 'bosc']
df.iloc[:,4:].str.replace(remove_list, np.nan, case=False) # exact match & case sensitive
df.iloc[:,4:].str.contains(remove_contain_list, np.nan, case=False) # contain & case sensitive
我该如何解决这些问题?
解决方案
您可以创建MultiIndex Series
by ,使用小写值和DataFrame.stack
获取完全匹配和部分匹配的掩码,替换为(替换的默认值是,因此无需指定),最后并分配回:Series.isin
Series.str.contains
Series.mask
NaN
Series.unstack
remove_list = ['APPLE', 'BEKO']
remove_contain_list = ['SUNG', 'bosc']
s = df.iloc[:,4:].stack(dropna=False)
m1 = s.str.lower().isin([x.lower() for x in remove_list])
m2 = s.str.contains('|'.join(remove_contain_list), case=False)
s = s.mask(m1 | m2)
df.iloc[:,4:] = s.unstack()
print (df)
ID COUNTRY GENDER AGE V1 V2 V3 V4 V5
0 1 1 1 53 NaN NaN NaN APPLE123 xApple111t
1 2 2 2 51 NaN NaN NaN NaN ttBeko111t
2 3 3 1 24 NaN NaN NaN NaN NaN
编辑:如果匹配,您可以将掩码替换为背景颜色Styler.apply
:
def color(x):
c1 = 'background-color: yellow'
c = ''
remove_list = ['APPLE', 'BEKO']
remove_contain_list = ['SUNG', 'bosc']
s = x.iloc[:,4:].stack(dropna=False)
m1 = s.str.lower().isin([i.lower() for i in remove_list])
m2 = s.str.contains('|'.join(remove_contain_list), case=False)
m = m1| m2
df1 = pd.DataFrame(c, index=x.index, columns=x.columns)
mask = m.unstack(fill_value=False).reindex(x.columns, fill_value=False, axis=1)
df1 = df1.mask(mask, c1)
return df1
df.style.apply(color,axis=None)
推荐阅读
- r - 是否可以在此主题模型脚本中添加一些代码以使未经培训的同事能够轻松使用它?
- c# - 模糊呼叫的问题
- google-cloud-platform - 是否可以在不使用 BigQuery 清理的情况下查询存储在云存储中的日志数据?
- api - 尝试进行身份验证时如何解决“无法创建房间”?
- java - 如何使用多部分/表单数据?
- c# - 是否可以使用自定义 ComboBox 填充 DataGridViewComboBoxCell?
- python-3.x - 我正在尝试在 matplotlib 中将 x 轴从底部移动到顶部。但是 xaxis.set_ticks_position('top') 似乎不能正常工作?
- android - 将数据从 page1 发送到 page2 并保存
- shinydashboard - R包创建:如何自动安装丢失的包?
- gitahead - 如何设置SSH识别文件路径