【pandas】apply方法傳入dataframe多列進行函式操作
阿新 • • 發佈:2018-12-12
在處理資料的時候想做時間的轉換,抽取生日(格式如 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
(func, axis=0, broadcast=None, raw=False, reduce=None, result_type=None, args=(), **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)