1. 程式人生 > >【pandas】apply方法傳入dataframe多列進行函式操作

【pandas】apply方法傳入dataframe多列進行函式操作

參考:dataframe.apply官方文件

How to apply a function to two columns of Pandas dataframe

python pandas- apply function with two arguments to columns           

在處理資料的時候想做時間的轉換,抽取生日(格式如 1994-10-5)提取月份和日期轉換成星座,以下是星座轉換function,需要傳入month和day,已有的dataframe資料裡已經有dataframe['月份'],dataframe['日'],即需要傳入2列資料,轉換得到dataframe['星座'](當然還有一個思路是 只傳一個生日進去,然後在函式裡split('-)提取月份和日,但是我就是想看看傳多列參怎麼解決而已hh)


def date2Constellation(month, day):
    cst = (u'摩羯座', u'水瓶座', u'雙魚座', u'白羊座', u'金牛座', u'雙子座', u'巨蟹座', u'獅子座', u'處女座', u'天秤座', u'天蠍座', u'射手座')
    date = ((1, 20), (2, 19), (3, 21), (4, 21), (5, 21), (6, 22), (7, 23), (8, 23), (9, 23), (10, 23), (11, 23), (12, 23))
    return cst[len(list(filter(lambda y: y <= (month, day), date))) % 12]

 先來看看官方文件裡的apply()

DataFrame.apply(funcaxis=0broadcast=Noneraw=Falsereduce=Noneresult_type=Noneargs=()**kwds)[source] 

Apply a function along an axis of the DataFrame.

 其中args=(),就是傳入傳入func的引數,所以我嘗試了以下寫法

    dataSet['星座'] = dataSet.apply(date2Constellation,args=(dataSet['出生月份'], dataSet['出生日']), axis=1)

然後報如下錯

後來參考了stackoverflow,正確寫法如下

  dataSet['星座'] =  dataSet.apply(lambda x :date2Constellation(x['出生月份'],x['出生日']),axis=1)