引子:pansas描述性统计可参考前篇https://www.jianshu.com/p/4730784baeb1
而pandas在数据处理上,有更多的操作技巧,在此文重新整理数据的基础处理。以下使用kaggle上的pokemon数据集。
离散化
(注:离散化是数据分析非常常见的拆分思路。初级的数据分析师常用数据知识通常只是小学数学,在这种情况下,如何快速识别波动原因?通过离散化,将原来的连续数据(或者大量的离散数据)拆成几个区间,从而利用二分的思路不断缩小波动的可能区间)
import pandas as pd
df2=read_csv('file_path')
pd.cut(df2.Attack, 3, labels=['low', 'middle', 'high'])
#注:cut方法是严格按值的大小进行分组,比如最小值0,最大值100,则分四组,每组的区间间隔25
#注:qcut方法类似分位数的做法,如分四组,则每组的边界则正好是四分位数
df2.Attack.describe()
pd.cut(df2.Attack, 4)
pd.qcut(df2.Attack, 4)
排序
(注:排序功能是很高频的功能,可以直观的看到一些变量边界值的分布情况,同时,为排序后可以使用切片采集一些关注信息)
#按索引排序
df2.sort_index()
df2.sort_index(axis=1, ascending=False)
#按某个变量值排序
df2.sort_values(by='HP')
df2.sort_values(by=['HP', 'Attack'])#此处排序会优先list中的第一个变量
#排序后切片
df2.Attack.nlargest(2)#相当于先sort_values,再head
函数
(注:pandas函数提供了对data_frame/series中的每一数做映射的方法;一个简单应用场景是,如果没有这种思路,可能需要以遍历+新函数定义的方式解决每一个元素的判断问题;比如数据邮件日报的阈值报警)
#apply方法(apply同时适用于data_frame和series,另一种方法map仅适用于series,但使用思路大体一致,此处不再赘述)
df2.HP.apply(lambda x:'is_tanker' if x > 90 else 'weak_bird')
df2[['Attack', 'HP']].apply(lambda x:x.max(), axis=0)
#applymap方法:针对data_frame中的每一个元素
df2[['Name', 'Type 1']].apply(lambda x:str(x).lower(), axis=0)
修改列名/索引名
#修改列名
df2[['Attack', 'HP']].rename(columns={'Attack':'sword', 'HP':'shield'})
#修改索引名
df2[['Attack', 'HP']].rename(index={0:'first'})
类型操作
#识别不同类别变量的列数
df2.get_dtype_counts()
#转换数据类型,可使用astype方法或者to_numeric, to_datetime, to_timedelta
df2.Attack.astype(float)
pd.to_numeric(df2.Name, errors='raise')#转化失败时抛出异常
pd.to_numeric(df2.Name, errors='ignore')#转化失败时忽略
pd.to_numeric(df2.Name, errors='coerce')#转化失败时赋值为NAN(not a number)或者NAT(对于日期转化)
(注:本文非原创文章,主要作为学习笔记整理,原文见https://mp.weixin.qq.com/s?__biz=MzU1MjYzNjQwOQ==&mid=2247484072&idx=1&sn=b9d03e25b5c952b30bd27fdabedaa77b&scene=19#wechat_redirect)