pandas的一些使用技巧

在使用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 不可少

推荐阅读更多精彩内容