在使用django建站从数据库取数据时,使用到python的模块pandas的一些用法:
1,pandas中某一列保存为列表
obj_ipinfosdetail = models.Ipaddr.objects.all().values()
pd.DataFrame(obj_ipinfosdetail)["domaintitle"].tolist()
2,pandas使用apply增加新一列,并且新一列的数据接口是列表
def back_ip_domainslist(ipdict):
ip_instance = models.Ipaddr.objects.get(ipinfo=ipdict)
obj_domains = ip_instance.domaintitle.all().values() # 通过ip正向查询所域名
obj_dtdomains = ip_instance.dtdomaintitle.all().values()
if obj_domains and obj_dtdomains:
domains_list = pd.DataFrame(obj_domains)["domaintitle"].tolist()
dtdomains_list = pd.DataFrame(obj_dtdomains)["ipinfo"].tolist()
return domains_list+dtdomains_list
elif obj_domains and not obj_dtdomains:
domains_list = pd.DataFrame(obj_domains)["domaintitle"].tolist()
return domains_list
elif not obj_domains and obj_dtdomains:
dtdomains_list = pd.DataFrame(obj_dtdomains)["ipinfo"].tolist()
return dtdomains_list
obj_ipdf["domaintitle"] = obj_ipdf["ipinfo"].apply(back_ip_domainslist)
domain_ip_df = obj_ipdf[obj_ipdf["domaintitle"].apply(lambda x: x != None)] #排除某一列数不是某个指定字符
3,将DataFrame中列表数据列拆分成多行的方法
domain_ip_dict=domain_ip_df.reindex(domain_ip_df.index.repeat(domain_ip_df.domaintitle.str.len())).assign(domaintitle=np.concatenate(domain_ip_df.domaintitle.values)).to_dict(orient="records")
详细用法可参考:https://www.cjavapy.com/article/237/
4,创建一个空DataFrame,向该DataFrame中添加行
df = pd.DataFrame()
domain_ips_df=pd.DataFrame(domain_ips)
df=df.append(domain_ips_df,ignore_index=True) #ignore_index=True 不可少
网友评论