Python分析建模,日常问题整理(十)
2018.09.26~2018.10.1
离2019<100天
- json数据解析
json.dumps()
将Python对象转化为json
json.loads()
将已编码的 JSON 字符串解码为 Python 对象
dict_.get('keys_',default_value)
get函数返回指定键的值,如果值不在字典中返回默认值。
首先了解json的结构和内容,每个模块的结构是什么,哪些模块的结构相同。
其次确定需要提取的数据模块。
-
2 TypeError: unhashable type: 'list'
对数据框dataframe进行去重或者统计等操作。
因为list是不可哈希的,tuple是可以哈希的。所以如果要用duplicated等对数据框处理操作时,数据框里面不能有list/set/dict的数据类型。 -
3 hash?
-
4 数据量很大的情况下,df.groupby处理很慢,如何解决。
可以使用生成器,每次生成一小块不重复的数据,然后逐一将数据拼接起来。循环时输出处理进度。这样不占用内存,又可以看到处理过程。
def createGenerator():
set_id = list(set(tem_df['id_num']))
for n in range(215):
if n<215:
tem_dat = tem_df[tem_df['report_id'].isin(set_id[n:(n+2000)])]
n = n*2000
print('第%d个report_id'%n)
else :
tem_dat = tem_df[tem_df['report_id'].isin(set_id [n:])]
yield tem_dat.groupby(['id'])
# 调用生成器
t1 = datetime.datetime.now()
final_ = pd.DataFrame([])
for group1 in mygenerator:
tem = group1.agg({'rule_name':'counts']})
final_ = pd.concat([final_ ,tem ],axis = 0)
t2 = datetime.datetime.now()
print('累积处理时长:',(t2-t1).seconds,'s')
-
5 dataframe同时对两列排序
df.sort_values(by = ['val1','val2'],ascending=(False,False)).reset_index(drop = True,inplace = True) -
6 R自动分箱和保存
d = list()
for(i in names(dat)[1:10]) {
tem1 = dat[dat[,i]!=-99999,]
tem2 = dat[(dat[,i]!=-99999)&(dat[,i]!=0),]
print(i)
if("出现错误" %in% tryCatch(smbinning(df = tem1,y='y',x=i,p=0.1),
error=function(e){print("出现错误")} )) next
if("try-error" %in% class(try(smbinning(df = tem1,y='y',x=i,p=0.1)$ivtable,silent = TRUE))){
print('try-error')
result = smbinning(df = tem2,y='y',x=i,p=0.1)
x.inv = try(result$ivtable,silent = TRUE)
if("try-error" %in% class(x.inv)) next
print(result$cuts)
d[[i]] <- paste(c(0,result$cuts),collapse=",")
}else{
result = smbinning(df = tem1,y='y',x=i,p=0.1)
x.inv = try(result$ivtable,silent = TRUE)
if("try-error" %in% class(x.inv)) next
# print(result$ivtable)
print(result$cuts)
d[[i]] <- paste(result$cuts,collapse=",")
}
}
write.table(data.frame(d),'r_smbinnin.txt')
网友评论