我最近问了一个关于对数据帧的特定列应用select_dtypes的问题。
我有一个在其列上具有不同dtypes的数据框(在本例中为str和int)。
df = pd.DataFrame([
[-1, 3, 0],
[5, 2, 1],
[-6, 3, 2],
[7, '<blank>', 3 ],
['<blank>', 2, 4],
['<blank>', '<blank', '<blank>']], columns='A B C'.split())
我想为字符串和整数创建不同的掩码。然后,我将基于这些蒙版应用样式。
首先让我们定义一个函数,该函数将帮助我为不同的dtypes创建掩码。 (Thanks to @jpp)
def filter_type(s, num=True):
s_new = pd.to_numeric(s, errors='coerce')
if num:
return s_new.notnull()
else:
return s_new.isnull()
然后我们的第一个遮罩将是:
mask1 = filter_type(df['A'], num=False) # working and creating the bool values
第二个掩码将基于整数间隔:
mask2 = df['A'].between(7 , 0 , inclusive=False)
但是当我运行mask2时,它给了我错误:
TypeError:'>' not supported between instances of 'str' and 'int'
我该如何克服这个问题?
注意:我要应用的样式如下:
def highlight_col(x):
df=x.copy
mask1 = filter_type(df['A'], num=False)
mask2 = df['A'].between(7 , 0 , inclusive=False)
x.loc[mask1, ['A', 'B', 'C']] = 'background-color: ""'
x.loc[mask2, ['A', 'B', 'C']] = 'background-color: #7fbf7f'
答案 0 :(得分:3)
pd.DataFrame.loc
用于设置值。您需要pd.DataFrame.style
来设置样式。另外,您可以使用try
/ except
作为识别数字比较失败的方法。
这是一个最小的例子:
def styler(x):
res = []
for i in x:
try:
if 0 <= i <= 7:
res.append('background: red')
else:
res.append('')
except TypeError:
res.append('')
return res
res = df.style.apply(styler, axis = 1)
结果: