首页 > 解决方案 > 有没有办法将 colorsys.rgb_to_hsv 应用于熊猫数据框?

问题描述

我有一个 csv 文件,其中三个不同的列中包含 rgb 颜色值,我想使用 colorsys 将其转换为 hsv。

我首先尝试的代码将 rgb 值除以 255 以获得 0-1 之间的值,然后我尝试为 colorsys.rgb_to_hsv 创建变量,以针对正确列中的值。显示:

import colorsys
import pandas as pd
import numpy as np 

index=["R", "G", "B"]

data = pd.read_csv('shirtstesting.csv', names=index, header=None)

df = pd.DataFrame(data)

df /= 255

print(df)

R = df["R"]
G = df["G"]
B = df["B"]

hsv = colorsys.rgb_to_hsv(R, G, B)

hsvarray = []
for x in df[['R', 'G', 'B']]:
    hsv = colorsys.rgb_to_hsv(R, G, B)
    hsvarray.append(hsv)

print(hsvarray)

但是我得到一个错误,说一个系列的真值是模棱两可的。我认为问题在于我给出了一个系列,所以我使用以下代码将系列转换为列表:

import colorsys
import pandas as pd
import numpy as np 

index=["R", "G", "B"]

data = pd.read_csv('shirtstesting.csv', names=index, header=None)

df = pd.DataFrame(data)

df /= 255

print(df)

R = df["R"]
G = df["G"]
B = df["B"]

l_1d = R.values.tolist()
l_2d = G.values.tolist()
l_3d = B.values.tolist()

hsv = colorsys.rgb_to_hsv(l_1d, l_2d, l_3d)

hsvarray = []
for x in df[['R', 'G', 'B']]:
    hsv = colorsys.rgb_to_hsv(R, G, B)
    hsvarray.append(hsv)

print(hsvarray)

现在它返回的错误是列表和列表不支持的操作数类型。

不知道现在该尝试什么。任何帮助表示赞赏。谢谢!

标签: pythonpandasdataframenumpy

解决方案


尝试:

hsv_df = df[['R','G','B']].apply(lambda x: colorsys.rgb_to_hsv(*x), axis=1)

或者

hsv_arr = [colorsys.rgb_to_hsv(r,g,b) for _, (r,g,b) in df[['R','G','B']].iterrows()]

推荐阅读