gpt4 book ai didi

python - 将一种方法应用于 Pandas 数据框中的几个选定列

转载 作者:太空宇宙 更新时间:2023-11-03 15:43:37 25 4
gpt4 key购买 nike

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

  • 在方法 1 中:

    我尝试通过使用 Dataframe 的索引并将 while 循环的递增计数器设置为 1 来逐一跳过第一列将该方法应用于每一列。执行此方法时我得到错误,即“Series”对象没有属性“style”,显然,我无法将方法应用于单个列。

  • 在方法 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 - 将一种方法应用于 Pandas 数据框中的几个选定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51306491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com