从13th solution中学到的pandas知识记录

昨天状态还是没有恢复,有点困,也有可能中午睡眠时间太短,整体效率不够高,上午完成了还没有写完的特征,训练模型,提交,发现又只上升了0.001,觉得这样不是个办法,感觉我目前就是在撞特征,在猜特征,我觉得不科学,效率低下!写1000个一个强特征撞不到,分数只能提升0.001,这就非常尴尬。下午有点灰心,再加上犯困!但是我知道,如果我放弃我就真的输了,我就什么都不是,于是我去找一些案例,类似于这个赛题的,看到一个赛题的题目,我并不知道是否和我这个类似,我只有深入进去读描述,看原始数据,才知道,最后也找到冠军方案,但是似乎没有代码对应,读得有些迷惑,找到了13th solution的code,开始抄写并理解,希望从中能找到灵感。温故一下昨天遇到的新知识:
1. Series.apply(func,convert_dtype=True),apply针对每一个element,第二个参数是是否去尝试找一个合适的dtype,否则用object,作者显示调用用的1,本来default True啊,没懂为什么
2.  read_csv参数很多,其中取多少行,nrows默认就是None全取,作者也采取显示调用;read_csv还有个参数date_parser可以指定parse_dates的方法,但是也感觉有点多余啊,似乎可以用来自定义时间的显示格式
3. pd.concat默认是上下的组合两个dataframe,可以column不同,有不同的column就新生成column,没有该column的df其数据就是NaN
4. df筛选取反,在筛选条件前面添加~,我isin筛选的时候前面加的是-,我尝试了一下,-和~都可以
5. pandas自带一种很快捷的编码方法,df[c].astype('category').cat.codes,有一种dtype类型叫category,有个属性cat,cat有个属性codes,从0开始编码,相当于labelEncode
6. 一个类型为datetime的Series,并不能通过.day/.month等直接取出来,但是可以通过转换成index来提取,比如pd.Index(df['date']).day,Series是不是应该用dt.day来取啊,果然可以呀,所以我觉得Series.dt.day更为科学
7. list删除element,用list.remove(element)
8. 日期可以转换成Unix时间戳,df['Date'].astype(np.int64)
9. pd.to_datetime很强大,可以转换很多时间,比如'2016-04',也可以转换 年第几星期星期几这样的特殊结构,著名格式就可以,比如pd.to_datetime(date, format='%Y%W%w'),format是被转换字符串的格式,需要显式地指出
10. df.apply(func, axis=1),等于1就是apply function to each row
11. dtype object还有一个str属性,str属性又有split方法,df_store[c].str.split(',').apply(pd.Series,1),这里df_store[c]都是4个元素的list,这样生成4个column,这里df_store[c]如果有NaN,就生成4个NaN,我不清楚如果有某个元素有5个元素是不是会生成5个column,没有这个column的就应该是NaN。我尝试了,果然是这样!
12. df只删除一个字段,不用drop,可以直接del df[c]
一不注意就记下了12点新知识,看来老司机的notebook,还是有很多很多值得我学习的地方啊!
总的说来,节奏不要乱,不用急,贵在恒!而不是冲动!关于跑步我迈出了第一步,很累,但是我不知道这样是否是合理的?加油!!!我发现要无所欲为就是要精神好,休息好,精力充沛,任何问题都难不到我!

留言

熱門文章