Цикл по строкам для применения функции - Python - PullRequest
1 голос
/ 28 сентября 2019

Не можете понять, как добавить строковый результат ('color_hek') обратно в фрейм данных (df) в виде отдельного столбца?

#importing libraries
import pandas as pd 

#creating dataset
data = [[0,0,0], [0,0,0]] 
df = pd.DataFrame(data, columns = ['red', 'green', 'blue']) 

#defining function
def rgb_to_hex(red, green, blue):
    """Return color as #rrggbb for the given color values."""
    return '#%02x%02x%02x' % (red, green, blue)

#looping through the dataframe to apply the function
for index, row in df.iterrows():
    color_hek = rgb_to_hex(row['red'].astype(int),row['green'].astype(int),row['blue'].astype(int))
    print(color_hek)

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Вы хотите применить rgb_to_hex() к столбцам «красный», «зеленый», «синий» каждой строки.Это однострочник с apply();никогда не используйте .iterrows(), это низкая производительность, не векторизовано и почти всегда можно избежать.

# First, convert df 'red', 'green', 'blue' columns to `.astype(int)`

def rgb_to_hex(row):
    """Return color as #rrggbb for the given color values."""
    return '#%02x%02x%02x' % (row['red'], row['green'], row['blue'])

df['hek'] = df.apply(rgb_to_hex, axis=1)

Вы можете сделать код еще более компактным в этом конкретном случае, как показало @ cs95, так как вы знаете только свой фрейм данныхимеет столбцы 'красный', 'зеленый', 'синий', вы можете использовать * распаковку кортежей в строке:

def rgb_to_hex(row):
    return '#%02x%02x%02x' % *row
0 голосов
/ 28 сентября 2019

Это простая проблема присвоения, но вам не следует использовать iterrows, особенно если вы не хотите изменить свой DataFrame.

Вместо этого используйте понимание списка и назначьте его обратно в качестве нового столбца.

df['hex'] = [rgb_to_hex(*v) for v in df.values]
# Or, if you have more than three columns,
# df['hex'] = [rgb_to_hex(*v) for v in df[['red', 'green', 'blue']].values]

   red  green  blue      hex
0    0      0     0  #000000
1    0      0     0  #000000

Начиная с , что я нахожу , понимание списка может быть очень быстрым в качестве следующей альтернативык не векторизованной задаче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...