#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, потому что я использовал ее, когда из моей функции возвращалось несколько значений. Теперь я понял! Спасибо