?
?最近工作经常需要用python做一些关于excel数据分析的事情。显然使用pandas是比Excel原生的vba更好的选择。因为pandas能提供诸如SQL的很多查找、过滤功能,性能要比用excel Vlookup之类的公式要快得多,给力的多!
技巧一:
????????利用drop_duplicates方法去重,有的时候,我们根据几个字段对应的某行值同时相同时,判断这些行是重复的,仅保留第一行,可以这样写:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
result_df=result_df.drop_duplicates(['公司代码','供应商代码','供应商名称','本月计划支付金额'],keep='first') #去重
技巧二:
? ? ? ??善于使用lambda表达式,尤其是功能很简单的函数,没必要单独自定义,比如,对某个字段的每个值都乘以10000,或者对某字段元素的所有字符串加上前缀“0000”,可以这样写:? ? ? ? ? ? ? ? ?
result_df["承兑汇票金额"]=result_df["承兑汇票金额"].apply(lambda x:x*10000)
result_df["供应商代码(必填)"]=result_df["供应商代码(必填)"].map(lambda x:"0000"+x if len(x)==6 else x)
result_df["供应商代码"]=result_df["供应商代码"].map(lambda x:x[4:]) #去掉供应商代码的前0000
技巧三:?
?????????善于用dropna方法来过滤数据!该方法支持传入列表,对列表元素对应的每个字段同时使用dropna方法:?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
df=df.dropna(subset=["供应商代码(必填)",'供应商名称(必填)','本月计划支付金额(必填)',"款项性质(必填)","付款条件(必填)"])
?技巧四:
????????善于使用map、apply方法来遍历元素结合自定义函数,比如小爬要处理的字段:先要判断该字段对应的元素是否为数字,要过滤掉那些不是数字的行,就可以先定义函数,然后用apply或者map来调用它:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
def isNumber(x):
if isinstance(x,float) or isinstance(x,int):
return 1
if isinstance(x,str):
return 0
df["本月计划支付金额为数字"]=df["本月计划支付金额(必填)"].map(isNumber) #产生辅助字段
df=df[df["本月计划支付金额为数字"]==1]
df=df[df['本月计划支付金额(必填)']>0]
??技巧五:
????????判断某个字段的值是否在某个列表,常用.isin(list)方法,比如:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
error_df=original_df[original_df["供应商代码(必填)"].isin(common_supplier_list_final)] #common_supplier_list_final为列表对象
?? 如果我们希望取反,找不符合某个列表元素的那些数据集合,就要用到“~”,上面的语句可以改写为:
error_df=original_df[~original_df["供应商代码(必填)"].isin(common_supplier_list_final)] #对正常那部分行项目抛开,取反,关键符号~
以上就是小编的分享的小技巧了,?在我们实际的数据分析中,用户提供的数据源有很多脏数据,空数据,要用到数据清洗,这就需要用到pandas的很多小方法小技巧,愿大家平时多多积累,才能慢慢掌握,逐渐为自己所用。
|