web-dev-qa-db-fra.com

Problème de passage dans lambda pour postuler pandas DataFrame

J'essaie d'appliquer une fonction à toutes les lignes d'un pandas DataFrame (en fait juste une colonne dans ce DataFrame)

Je suis sûr que c'est une erreur de syntaxe mais je suis sûr de ce que je fais mal

df['col'].apply(lambda x, y:(x - y).total_seconds(), args=[d1], axis=1)

La colonne col contient un groupe a datetime.datetime objets et et d1 est le plus ancien d'entre eux. J'essaie d'obtenir une colonne du nombre total de secondes pour chacune des lignes

MODIFIER Je reçois toujours l'erreur suivante

TypeError: <lambda>() got an unexpected keyword argument 'axis'

Je ne comprends pas pourquoi axis est passé à ma fonction lambda

MODIFIER 2

J'ai aussi essayé de faire

def diff_dates(d1, d2):
    return (d1-d2).total_seconds()

df['col'].apply(diff_dates, args=[d1], axis=1)

Et je reçois la même erreur

24
sedavidw

Eh bien, il n'y a pas de paramètre axis pour une série: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.apply.html#pandas.Series.apply

Series.apply (func, convert_dtype = True, args = (), ** kwds)

func : function
convert_dtype : boolean, default True
Try to find better dtype for elementwise function results. If False, leave as dtype=object
args : Tuple
Positional arguments to pass to function in addition to the value

Il y en a un pour un df mais on ne sait pas comment vous vous attendez à ce que cela fonctionne lorsque vous l'appelez sur une série, mais vous vous attendez à ce qu'il fonctionne sur une ligne?

30
EdChum