Как распечатать лямбда-функцию? - PullRequest
0 голосов
/ 18 апреля 2020

Я борюсь с печатью простой лямбда-функции. Я пробовал разные вещи, но все они дают ошибки. Есть идеи?

См. Код ниже:

import numpy as np
import pandas as pd

df = pd.DataFrame({
    "A": [18,28,29,32,35,36,37,37,39,40,42,42,46,48,54,56,57,61,61,62,63,65],
    "B":  [9,13,17,15,23,21,24,28,26,30,29,36,38,42,40,48,40,51,54,50,51,57]
})

a = lambda df: np.corrcoef(df[:,0], df[:,1])[0,1]

print(a(df)) # -> TypeError: '(slice(None, None, None), 0)' is an invalid key
print(a())   # -> TypeError: <lambda>() missing 1 required positional argument: 'df'
print(a)     # -> prints the function but not the result and it's the result I want

Решение:

a = lambda df: np.corrcoef(df["A"], df["B"])[0,1]
a = lambda df: np.corrcoef(df.iloc[:,0], df.iloc[:,1])[0,1]
print(a(df))

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Вы действительно должны прочитать pandas документацию и внимательно прочитать сообщение об ошибке. Вы пытаетесь использовать pandas срез данных, недопустимый (df[:,0] и df[:,1]). Попробуйте вместо:

>>> a = lambda df: np.corrcoef(df["A"], df["B"])[0,1]
>>> print(a(df))
0.9744997251537248
1 голос
/ 18 апреля 2020

Сообщения об ошибках довольно явные.

print(a(df)) # -> TypeError: '(slice(None, None, None), 0)' is an invalid key
# your function have an error, the [:, 0] item access is invalid

print(a())   # -> TypeError: <lambda>() missing 1 required positional argument: 'df'
# you cannot call a function that expect an argument without argument
print(a)     # -> prints the function but not the result and it's the result I want
# you ask for printing a function, it prints a function

Я думаю, вы не поняли, что такое лямбда-функция. Это анонимная функция, на нее нет смысла влиять. Это:

a = lambda df: np.corrcoef(df[:,0], df[:,1])[0,1]

В точности так:

def a(df):
    return np.corrcoef(df[:,0], df[:,1])[0,1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...