Объект int не может быть подписан после оператора if - PullRequest
0 голосов
/ 18 сентября 2018

Итак, у меня есть фрейм данных:

import pandas as pd

df = pd.DataFrame({'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
        'score': [1, 3, 4, 5, 2]})

И я хочу создать новый столбец на основе условий в столбце «Оценка».

Я попробовал его вот так

df['happiness'] = df['score']
def are_you_ok(df):
    if df['happiness'] >= 4:
        return 'happy',
    elif df['happiness'] <= 2:
        return 'sad',
    else:
        return 'ok'

df['happines'] = df['happiness'].apply(are_you_ok)
df

Когда я пытаюсь запустить это, все, что я получаю, это:

TypeError: 'int' object is not subscriptable

Могу ли я не использовать этот тип функции с целым числом?

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Использование pd.cut

pd.cut(df.score,[0,2,4,np.Inf],labels=['sad','ok','happy'])
Out[594]: 
0      sad
1       ok
2       ok
3    happy
4      sad

#df['yourcol']=pd.cut(df.score,[0,2,4,np.Inf],labels=['sad','ok','happy'])
0 голосов
/ 18 сентября 2018

Проблема в том, что apply применяет вашу функцию к каждому значению в столбце.df - это не DataFrame внутри are_you_ok, а (в вашем случае) целое число.Естественно, Python жалуется на то, что вы не можете индексировать в целые числа с ['happiness'].

. Однако ваш код довольно легко исправить.Просто перепишите are_you_ok так, чтобы он работал с целочисленными аргументами.

In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
   ...:         'score': [1, 3, 4, 5, 2]})
   ...:         
In [3]: def are_you_ok(x):
   ...:     if x >= 4:
   ...:         return 'happy'
   ...:     elif x <= 2:
   ...:         return 'sad'
   ...:     else:
   ...:         return 'ok'
   ...:     
In [4]: df['happiness'] = df['score'].apply(are_you_ok)
In [5]: df
Out[5]: 
    name  score happiness
0  Jason      1       sad
1  Molly      3        ok
2   Tina      4     happy
3   Jake      5     happy
4    Amy      2       sad
0 голосов
/ 18 сентября 2018

Звучит так, как вы хотите np.select из numpy

import numpy as np

conds = [df.score >=4, df.score <=2]

choices = ['happy', 'sad']

df['happiness'] = np.select(conds, choices, default='ok')

>>> df
    name  score happiness
0  Jason      1       sad
1  Molly      3        ok
2   Tina      4     happy
3   Jake      5     happy
4    Amy      2       sad

Примечание: вы можете избежать явного импорта numpy, используя pandas.np (или pd.np,в зависимости от того, как вы импортировали панд) вместо np

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