python清洗Excel数据常用方法
有没有小伙伴和我一样,日常工作就是处理大量表格?是不是觉得脑累肩累心累?十年前有个人也跟我们一样为繁琐的工作感到沮丧,然后他就去学习了python,然后构建了专门用来处理表格的pandas项目。他就是pandas的作者Wes McKinney。pandas处理表格真是太好用了,博主写了这个程序以后,原来每个月都要没日没夜赶好多天的工作,现在只要拿着茶杯等着程序运行。
下面我们来看看一些常见的数据处理方法吧。
下面我们来看看一些常见的数据处理方法吧。
import pandas as pd import numpy as np from datetime import datetime from dateutil.relativedelta import relativedelta import os #处理日期 def quzheng_states(x): if x>datetime.today(): return ‘未取证‘ elif x<=datetime.today(): return ‘已取证‘ #数据分箱 def area_distribution(x): if x<=90: return ‘90方以内‘ elif x<=120: return ‘90-120方‘ #时间差,即过去到现在过了多长时间 def stock_age(x): try: y=relativedelta(datetime.today(),x) return y.months except: return 0 #把日期格式转化成“年月”格式 def year_month(x): try: y=pd.to_datetime(x).strftime(‘%Y-%m‘) return y except: pass #数据清洗与处理 def frame_create(path): frame=pd.read_excel(path,usecols=[‘项目‘,‘楼栋‘,‘产品类型‘,‘房源名称‘,‘预售许可证取证日期‘,‘推盘日期‘,‘预测建筑面积‘,‘成交总价‘, ‘成交总价建面单价‘,‘付款方式名称‘,‘按揭贷款‘,‘认购日期‘,‘签约日期‘,skipfooter=1) #分列 frame[‘住宅类型‘]=[x.split(‘-‘)[0] for x in frame.产品类型.dropna()] frame.产品类型=[x.split(‘-‘)[1] for x in frame.产品类型.dropna()] #字段名重命名 frame.rename(columns={‘产品类型‘:‘业态‘},inplace=True) frame[‘库龄(月)‘]=frame.推盘日期.apply(stock_age) frame[‘预售证状态‘]=frame.预售许可证取证日期.apply(quzheng_states) frame[‘面积段分布‘]=frame.预测建筑面积.apply(area_distribution) frame[‘签约年月‘]=frame.签约日期.apply(year_month) #获得动态货值 products=frame.业态.unique() dict={} for product in products: factor1=frame.业态==product factor2=frame.成交总价!=0 price=float(frame[factor1&factor2].成交总价建面单价.mean()) dict[product]=price def f(x): y=dict[x] return y frame[‘动态货值‘]=np.where(frame.成交总价==0,frame.预测建筑面积*frame.业态.apply(f),frame.成交总价) return frame #获取每个文件的路径 path_list=[] for root,dirs,files in os.walk(r‘/Users/fangluping/Desktop/2019年12月‘): for file in files: path_name=os.path.join(root,file) path_list.append(path_name) #每个清洗过的底表横向合并 df=pd.DataFrame() for path in path_list[1:]: frame=frame_create(path) df=pd.concat([df,frame]) #业态数据清洗 df.loc[df.业态.str.contains(‘高层‘),‘业态‘]=‘高层‘ df.to_csv(r‘/Users/fangluping/Desktop/python/现金流套表/数据底表总表.csv‘,index=None,encoding=‘utf_8_sig‘) #以上生成数据底表
相关推荐
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
夜斗不是神 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16
坚持是一种品质 2020-11-16
染血白衣 2020-11-16
huavhuahua 2020-11-20
meylovezn 2020-11-20
逍遥友 2020-11-20
weiiron 2020-11-16