python - 将方法应用于熊猫数据框中的几个选定列
问题描述
我想对 Dataframe 中的几列应用一个小方法。color_negative 方法不能应用于带有字符串的列,因此我需要以某种方式跳过这些列。我可以想到两种解决问题的方法,但遗憾的是没有一种方法有效。
在方法 1 中:
我尝试通过使用 Dataframe 的索引并将 while 循环的递增计数器设置为 1 将方法一一地应用于每一列,跳过第一列。执行此方法时,我收到错误,即“系列”对象没有“样式”属性,因此显然,我不能将方法应用于单个列。
在方法 2 中:
我尝试使用子集将该方法仅应用于具有数值的那些列,但我不确定我是否正确使用了子集。执行此方法时,我收到“Styler”类型的对象没有的错误
len()
。
这里有一个简化的例子:
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
有没有人建议如何解决这个问题?
解决方案
您可以选择想要的列,然后选择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')]
推荐阅读
- python - 减少python应用程序中的DNS查询
- docker - gitlab CI/CD:缓存 docker 镜像构建
- javascript - Property does not exist on type String error
- javascript - Promise.all 产生“油门队列超过最大容量”
- discord - 如何使用 Discord API 监视公共消息?
- c# - 从同一个游戏对象上的另一个脚本访问变量
- java - 每次部署能够启动多个骆驼上下文
- javascript - D3层次函数不计算y属性
- html - css定位2行
- python - 使用 pandas 在 python 中建立索引后更改数据框的列名