背景

在分析态密度(DOS)时,常常用p4vasp这个软件来读取vasprun.xml,进而获得需要的各元素或轨道对应的图形。然后,利用p4vasp的export功能将数据输出画图。具体操作参见

https://www.bigbrosci.com/2018/02/08/ex39/
注:本例中的数据来源也是该博文,感谢原作者的分享

然而,在将数据输出为dat格式后,发现一个问题,即:p4vasp把所有的数据都由上到下排在两列中,画图时面临着只有一个x, 一个y的情况,画出来的图如下:


而软件中的样子(我们想画成的样子)起码有颜色区别:

观察了数据后发现,每组数据是301行,之后有一个空行,然后再接301行,如此反复。当然数据量少可以手动剪切粘贴,但是数据很多的时候就会很繁琐。因此,想着利用python中的pandas功能来将这些数据每302行(含最后一个空行)为一组,取出,放在新的两列,然后再进行画图。 整理好思路,我们先把dat文件放到excel转为csv格式(记得分列),然后运行Python程序(py文件和csv在一个文件夹即可)

代码如下:

# -*- coding: utf-8 -*-
"""
Created on Sat Dec 12 20:15:08 2020@author: fya
"""#观察数据,301行后有一个空行。
import pandas as pddf0=pd.read_csv('testRu.csv',header=None) #记得更改为自己的csv文件名
l=len(df0)  #获取长度
l=l+1 #把最后一行空行也算上,要不然后面除以302会有错误
print(l)
print(df0.head())df=df0.iloc[0:301,:].reset_index(drop=True) #前301行数据为第一组,0:301是取从第0行到第300行,第301不取。reset_index(drop=True) 是为了去除原有的index,重新从0生成indexprint(df.tail())df_values=locals()
l=int(l/302) #用除法后要变为int,不然默认float,到后面range部分会出错
print(l)
for i in range(2,l+1):     #range括号左含右不含l1=302*i-302l2=302*i-1df_values['df'+str(i)]=df0.iloc[l1:l2,:].reset_index(drop=True)   #随着i的不同,每301行都取出,index不受原始数据影响,都是从0开始df=pd.concat([df,df_values['df'+str(i)]],axis=1,join='outer') #将取出的数据横着排列,axis=1,形成新的df,然后与下一个i产生的新的列继续合并直到结束print(df)
df.to_csv('dos.csv',header=None,index=None) #不要column和index,以免画图时出错
print('Done!')

用Python分好组是如下图这样的:

放入origin,设置对应的x,y,画图如下:

方法2

此方法无需再转存为csv文件,可以直接用dat文件,需要注意读入数据后没有空行

# -*- coding: utf-8 -*-
"""
Created on Sat Dec 12 20:15:08 2020@author: fya
"""import pandas as pddf0=pd.read_table('testRu.dat',sep='\s+',header=None,engine='python') #直接读取dat文件,读取后无空行
l=len(df0)  #获取长度
#l=l+1 #把最后一行空行也算上
print(l)   # 得到值:903
print(df0.head())df=df0.iloc[0:301,:].reset_index(drop=True) #前301行数据为第一组(0-300行,第301不取),reset_index(drop=True) 是为了去除原有的index,重新从0生成indexprint(df.tail())df_values=locals()
l=int(l/301) #用除法后要变为int,不然默认float,到后面range部分会出错
print(l)
for i in range(2,l+1):     #range括号左含右不含l1=301*(i-1)l2=301*idf_values['df'+str(i)]=df0.iloc[l1:l2,:].reset_index(drop=True)   #随着i的不同,每301行都取出,index不受原始数据影响,都是从0开始df=pd.concat([df,df_values['df'+str(i)]],axis=1,join='outer') #将取出的数据横着排列,axis=1,形成新的df,然后与下一个i产生的新的列继续合并直到结束print(df)
df.to_csv('dos.dat',header=None,index=None)
print('Done!')

此法输出dat文件,拖到origin直接画图,得到和方法一同样的结果

p4vasp分析态密度输出pdos数据后用Python分列相关推荐

  1. python 打开dat格式_p4vasp分析态密度输出pdos数据后用Python分列

    注:本文来源于"晚亭听铃"发表在CSDN网站上的原创博文,点击阅读原文关注他!在分析态密度(DOS)时,常常用p4vasp这个软件来读取vasprun.xml,进而获得需要的各元素 ...

  2. 分析89万招聘数据后发现:华为平均月薪35K,Java需求下降

    导读:基于国内各主流招聘网站发布的招聘岗位数据分析,5 月共计有 89 万招募中的互联网岗位,需求量与上月相比减少 50%,其中 TOP100 知名公司的职位有 27319 条,剔除销售.行政等市场与 ...

  3. 到底梅西和C罗谁更强?分析7年大赛数据后,才知道谁在巅峰

    "新闻故事类型的数据可视化是我想尝试的一个方向,锻炼了自身将数据可视化和故事相结合的能力,讲出能引发大家深思和共鸣的主题观点." 作品背景:作为一个资深球迷的我,刚好又正值欧洲杯和 ...

  4. 实例 | 分析38万条数据,用Python分析保险产品交叉销售和哪些因素有关

    公众号后台回复"图书",了解更多号主新书内容  CDA数据分析师 出品   作者:真达.Mika 数据:真达   [导读] 今天教大家用Python分析保险产品交叉销售和哪些因素有 ...

  5. c++输出txt格式循环一组数据后换行再循环一次_numpy、pandas以及用pandas做数据分析的案例...

    本文也是秦路老师python教程的学习笔记.这篇也是发给超哥看的:很多人说python很简单很好学,也有很多人说python没有java和c的功能强大.但是这都不重要,重要的是我们想学了,想画图也好做 ...

  6. JavaEE中用response向客户端输出中文数据乱码问题分析

    这篇文章主要介绍了JavaEE中用response向客户端输出中文数据乱码问题分析,需要的朋友可以参考下 Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的reques ...

  7. 输出nc数据_NetCDF(NC)数据的使用、转换和分析

    最近项目中需要处理和分析NC数据,所以我查了一下,百度百科的解释是:NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Co ...

  8. 利用python编写爬虫程序,从招聘网站上爬取数据,将数据存入到MongoDB数据库中,将存入的数据作一定的数据清洗后做数据分析,最后将分析的结果做数据可视化

    教程演示 创建爬虫项目 编写需要爬取的字段(items.py) 编写spider文件(wuyou.py) 编写数据库连接(pipelines.py) 编写反爬措施(settings.py) Mongo ...

  9. 这个工具,可视化分析10W数据后,找到了数据岗位月薪20K的秘诀

    经常有人会问我这样的问题:能不能做一个职业的可视化分析?最近找工作很不顺利,各种迷茫,希望从广大求职者的数据中得到一些启发. 肯定没问题,今天就给大家分析一波职业数据,以可视化的形式让各位感受一下数据 ...

最新文章

  1. [CQOI2009]中位数图 详细题解
  2. ACCP学习旅程之-----基础篇
  3. Leetcode 121 动态规划(原名字不通过审核)
  4. Android4.4.2KK竖屏强制更改为横屏的初步简略方案
  5. ResourceID(frameworks/base/libs/utils/README)
  6. Parsing Netflow using Kibana via Logstash to ElasticSearch
  7. [生态建设] - js判断小技巧
  8. matlab figure 嵌套,操作Matlab的Figure窗口(一)
  9. java web开发之上机指导(2)
  10. linux命令行终端设置tab补全文件名或路径不区分大小写(大小写不敏感)
  11. 6379端口恶意扫描_DNS重绑定的利用:端口扫描与绕过同源策略
  12. 右手定则判断向量积的方向
  13. php属相对应年份博客,十二生肖对应年份表
  14. cf一直连接服务器,玩穿越火线显示连接服务器超时怎么回事?原因分析及解决方法...
  15. 招商银行SWIFT CODE/BIC/BRANCH CODE一览表
  16. Keil MDK 编译器 AC5 和 AC6 优化选项重要内容和区别
  17. python数据分析之Pandas-3
  18. NRF52832学习笔记(11)——蓝牙MAC地址
  19. CentOS7系统root分区文件损坏修复的解决方法
  20. 怎么卸载电脑中的oracle,oracle怎么完全卸载

热门文章

  1. matlab滤波器脉冲响应,【 MATLAB 】impz函数介绍(数字滤波器的脉冲响应)
  2. 计算机网络物理连接和逻辑,[判断题] 计算机网络拓扑定义了网络资源在逻辑上或物理上的连接方式。...
  3. php 安装geoip,php GeoIP的使用教程
  4. python之斩根除草,破开隐藏文件的诡计
  5. 使用xp的日文输入法
  6. 不动产测绘数据入库_不动产登记中房产与地籍测绘数据整合
  7. 【无线传感器网络简明教程】课堂笔记
  8. RFID模块+WIFI模块+振动传感器+有源蜂鸣器+舵机+Arduino UNO R3所构成的门禁系统模块
  9. 软测_2执行发送邮件程序的回归测试
  10. Win10安装RNDIS驱动使用