применить функцию в pandas

#python #pandas #apply

#python #pandas #применить

Вопрос:

Когда я запускаю следующее

 import pandas as pd


def my_func(E, I):

    return E * I


d = {'E': [1, 1], 'I': [2, 2]}
df = pd.DataFrame(data=d)
df['S'] = df.apply(lambda x: my_func(x['E'], x['I']),axis=1).map(lambda x: x[0]) 
  

Я получаю следующую ошибку

 Traceback (most recent call last):
  File "U:GSYscipt.py", line 14, in <module>
    df['S'] = df.apply(lambda x: my_func(x['E'], x['I']),axis=1).map(lambda x: x[0])
  File "C:Usersgsy.LSHAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagespandascoreseries.py", line 3630, in map
    new_values = super()._map_values(arg, na_action=na_action)
  File "C:Usersgsy.LSHAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagespandascorebase.py", line 1145, in _map_values
    new_values = map_f(values, mapper)
  File "pandas_libslib.pyx", line 2329, in pandas._libs.lib.map_infer
  File "U:GSYscript.py", line 14, in <lambda>
    df['S'] = df.apply(lambda x: my_func(x['E'], x['I']),axis=1).map(lambda x: x[0])
TypeError: 'int' object is not subscriptable
  

Я на 100% уверен, что это работало в прошлом, поскольку я широко его использовал.
Кто-нибудь знает, почему это происходит?

Комментарии:

1. почему apply и map почему ? Что ты здесь пытаешься сделать? Это никогда не должно сработать, если только у вас нет другой функции.

2. Я бы предположил, что вы добавили часть .map по ошибке?

3. Я не понимаю отдельной функции здесь. Почему бы просто не сделать df.E * df.I ?

4. я хочу вызвать функцию, которая принимает некоторые аргументы. Умножение приведено только для простоты в этом примере. Когда у меня была функция, которая возвращает более одного значения, я использовал следующее:

5. df[‘type’] = df.apply(лямбда x: stiffener_parameters(x[‘Member’], x[‘t_c_s’], x[‘b_eff’], x[‘s’]),ось =1).map(лямбда x: x[0])

Ответ №1:

Просто отбросьте последнюю карту в конце. Функция возвращает список, а ваша последняя функция map пытается получить первый элемент списка.

 import pandas as pd

def my_func(E, I):
    return E * I

d = {'E': [1, 1], 'I': [2, 2]}
df = pd.DataFrame(data=d)
df['S'] = df.apply(lambda x: my_func(x['E'], x['I']),axis=1)
  

В качестве альтернативы, но на основе комментариев здесь, вы можете вернуть значение из my_func в виде списка:

 import pandas as pd

def my_func(E, I):
    return [E * I]

d = {'E': [1, 1], 'I': [2, 2]}
df = pd.DataFrame(data=d)
df['S'] = df.apply(lambda x: my_func(x['E'], x['I']),axis=1).map(lambda x: x[0])
  

Комментарии:

1. да, вы правы!!! я получал эту ошибку из-за функции .map, потому что я использовал ее, когда из моей функции возвращалось несколько значений. Теперь я понял! Спасибо