有没有小伙伴和我一样,日常工作就是处理大量表格?是不是觉得脑累肩累心累?十年前有个人也跟我们一样为繁琐的工作感到沮丧,然后他就去学习了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')
#以上生成数据底表
来源:51CTO
作者:wx5d72071a58c07
链接:https://blog.51cto.com/14534896/2485545