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

通过p4vasp分析vasprun.xml得到DOS数据并导出为dat格式后,使用Python的pandas库对数据进行处理,将每302行数据分为两列,以便进行绘图。原始数据导致只有一个x和一个y,无法直观展示不同颜色的区别。通过转换,最终能在Origin中正确设置x、y轴并绘制多组数据的图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:本文来源于“晚亭听铃”发表在CSDN网站上的原创博文,点击阅读原文关注他!

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

https://www.bigbrosci.com/2018/02/08/ex39/

注:本例中的数据来源也是该博文,感谢原作者的分享

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

415d0d5d46b157e7f462e7ca7bec2cf8.png7f518c2608974b3cc4fb2ebb181dedff.png

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

f19fd2f7f6926f0e36f740cf52dc8a2d.png

观察了数据后发现,每组数据是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=localsl=int(l/302) #用除法后要变为int,不然默认float,到后面range部分会出错print(l)for i in range(2,l+1): #range括号左含右不含 l1=302*i-302 l2=302*i-1 df_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分好组是如下图这样的:

50b7a9fa8d40e05208a5b1533e7b051f.png

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

5a23e2847384af0d985e80fabd8ba5cb.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值