首页 > 解决方案 > 将方法应用于熊猫数据框中的几个选定列

问题描述

我想对 Dataframe 中的几列应用一个小方法。color_negative 方法不能应用于带有字符串的列,因此我需要以某种方式跳过这些列。我可以想到两种解决问题的方法,但遗憾的是没有一种方法有效。

这里有一个简化的例子:

import pandas as pd

d = {'col1': ['a', 'b'], 'col2': [21, 22], 'col3': [3, 51]}
df = pd.DataFrame(data=d)

def color_negative_red(val):
    color = 'black'
    if val < -1 : color = 'red'
    if val > 1 :  color = 'green'
    return 'color: %s' % color    
    
i=1
while i <= len(df):
    #Approach 1
    df.iloc[:, i] = df.iloc[:, i].style.applymap(color_negative_red)
    #Approach 2
    df = df.style.applymap(color_negative_red, subset = df.iloc[:, i])
    i+=1    

df

有没有人建议如何解决这个问题?

标签: pythonpandasdataframe

解决方案


您可以选择想要的列,然后选择applymap它们,如下所示:

column_names = ['name_a','name_b']
df[column_names] = df[column_names].applymap(my_func)

如果你愿意,你可以过滤掉字符串的列

from numpy.core.multiarray import dtype

column_names = [name for name,col_type in df.dtypes.items() if col_type!=dtype('O')]

推荐阅读