2015-03-19 30 views
11

Tôi đang cố gắng để áp dụng một chức năng để tất cả các hàng của một DataFrame gấu trúc (trên thực tế chỉ là một cột trong DataFrame đó)Rắc rối đi qua trong lambda để áp dụng cho gấu trúc DataFrame

tôi chắc chắn rằng đây là một lỗi cú pháp nhưng tôi biết chắc chắn những gì tôi đang làm sai

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

cột col chứa một bó một datetime.datetime đối tượng và và d1 là sớm nhất trong số họ. Tôi đang cố gắng để có được một cột trong tổng số giây cho mỗi hàng

EDIT tôi tiếp tục nhận được lỗi sau

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

Tôi không hiểu tại sao axis được nhận được thông qua để lambda chức năng của tôi

EDIT 2

tôi cũng đã cố gắng làm

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

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

Và tôi nhận được lỗi tương tự

+0

Có thể arg và trục nằm trong cùng một khung với 'lambda' đang làm gì đó không? – Zizouz212

+0

Bạn đang cố gắng trừ một cột ngày này sang cột khác? Hoàn toàn không rõ những gì bạn thực sự muốn. Hiển thị đầu vào của bạn và những gì bạn muốn làm đầu ra – qwwqwwq

+0

trông giống như vấn đề ưu tiên của nhà điều hành. Tôi nghĩ rằng bạn đang nói với lambda để trả lại 3-tuple. – royce3

Trả lời

13

Vâng không có axis param cho một Series: 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 

có một cho một df nhưng nó không rõ ràng làm thế nào bạn đang mong đợi điều này để làm việc khi bạn đang gọi nó trên một loạt nhưng bạn đang mong đợi nó để làm việc trên một hàng?

Các vấn đề liên quan