2015-03-19 11 views
11

Sto cercando di applicare una funzione a tutte le righe di un dataframe panda (in realtà solo una colonna in quella dataframe)Problemi passando lambda di applicare per i panda dataframe

Sono sicuro che questo è un errore di sintassi, ma sono so sicuro di quello che sto facendo male

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

la colonna col contiene un mucchio un datetime.datetime oggetti ed e d1 è la più antica di loro. Sto cercando di ottenere una colonna del numero totale di secondi per ciascuna delle righe

EDIT Continuo a ricevere il seguente errore

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

non capisco il motivo per cui axis è sempre passato al il mio lambda funzione

EDIT 2

ho anche provato a fare

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

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

E ottengo lo stesso errore

+0

Potrebbe essere che args e asse si trovano nella stessa staffa di 'lambda'? – Zizouz212

+0

Stai cercando di sottrarre una colonna di una data da un'altra? Totalmente poco chiaro quello che vuoi veramente. Mostra il tuo input e quello che vuoi come output – qwwqwwq

+0

sembra un problema di precedenza degli operatori. Penso che tu stia dicendo al lambda di restituire una tupla da 3 t. – royce3

risposta

13

Beh non c'è axis param per una Serie: 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 

ce n'è una per una df ma non è chiaro come si Ti aspetti che funzioni quando lo chiami in una serie ma ti aspetti che funzioni su una riga?