您的位置:首页 > 其它

利用Pandas对数据进行处理

2018-06-04 12:37 411 查看

Pandas数据处理

现有一数据集Data.out,通过Pandas提取数据并绘制曲线。提取内容下图所示:



工具:Pycharm,Python2.7,Pandas,Numpy,matplotlib


#导入所需要库

import pandas as pd import numpy as np import re import matplotlib as mpl import matplotlib.pyplot as plt#使用pandas.read.fwf()读取定宽列格式数据Data = pd.read_fwf('Data.out')#使用to.csv()保存DataFrame文件以利于观察和查看Data.to_csv('CreatData.txt', sep=',')

List_all = [] #定义所有情况的集合
List_need=[]#定义所需的列表
#提取==data==01-set、==data==02-set、==data==03-set对应的行数
for i in range(Data.ix[:,0].size):
    if re.search('==',str(Data.ix[[i]].values[0][0])) !=None:
        List_all.append(i)

#定义所需的字符列表
List_Tab_need = ['02-set']
#提取字符列表对应的行数
for i in range(Data.ix[:, 0].size):
    for j in range(len(List_Tab_need)):
        if re.search(List_Tab_need[j], str(Data.ix[[i]].values[0][0])) != None:
            List_need.append(i)
List_and=[i for i in range(len(List_all)) if List_all[i] in List_need]
#提取x,y并绘制曲线
def y_x(List_all):
    y=[]#定义y空列表
    x=[]#定义x空列表
    a=List_all[List_and[0]]+5
    b=List_all[List_and[0]+1]-1
    Taking_x_rst=Data.iloc[a:b,0]
    for i in range((Taking_x_rst.size/2)):
        a0=a+2*i
        #y数据
        y.append(float(Data.iloc[a0,0].split()[0]))
    for i in range((Taking_x_rst.size/2)):
        b0=a+1+2*i
        if len(Data.iloc[b0,0].split())==5:
            x.append(float(Data.iloc[b0,0].split()[3].split('/')[1]))
        else:
            x.append(float(Data.iloc[b0,0].split()[4]))
    ny=np.array(y)
    dx=np.array([1/i for i in x])
    #绘制曲线
    plt.figure(facecolor="w",figsize=(3,4))
    plt.plot(dx,ny,"--",label=u"y-x",color="red",linewidth=3)
    plt.title(u"*_y-x_*",fontsize=15)
    plt.xlabel(u"x",fontsize=20)
    plt.ylabel(u"y",fontsize=20)
    plt.xlim((0,max(dx)))
    plt.ylim((0,ny[0]))
    plt.legend()
    plt.savefig(u"y-x")#保存图片
    plt.show()
y_x(List_all)

代码地址:https://github.com/jz20170904/Pandas-data/tree/master

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: