petrel软件中的等值线导出然后加入Geomap4.0中成图/用python处理petrel导出的等值线以便于加入Geomap4.0中
生活随笔
收集整理的這篇文章主要介紹了
petrel软件中的等值线导出然后加入Geomap4.0中成图/用python处理petrel导出的等值线以便于加入Geomap4.0中
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從petrel軟件導出來的等值線格式不能直接加入Geomap軟件,所以需要進行一些數據預處理
做這個事情是想探索一下Geomap4.0的使用方法,畢竟Geomap3.6用了太久,也該換新的了。
遇到的第一個難題就是Geomap4.0需要加載的數據和3.6完全不同,不知道該把數據處理成什么樣子。
思索了n長時間后,想出了一個解決方法:就是先建立一個3.6版本的工區,然后拿4.0版本打開,然后再導出成4.0版本的數據,這個數據不就是4.0可以加載的數據了么。我可真牛逼,所以開始動工。
基本流程
1. petrel導出等值線格式為Zmap+
2. 用python的pandas庫處理數據***重點***
3. 在geomap4.0加載等值線
一、導出的Zmap+格式和的數據長這樣(原數據)
二、Geomap4.0可加載的等值線數據長這樣(處理后)
三、用python的pandas庫處理數據
1. 讀取數據
import pandas as pd fpath = "petrel_Zmap.txt" df = pd.read_table(fpath,sep = '\s+', # 表明輸入數據按照空格以及多個空格分列#delim_whitespace = True,header = None,names = ['x', 'y', 'num', 'z'],engine='python')2.刪除z列重復項
#新增一列 判斷以num列分組 z值的重復項 df['bool'] = df.duplicated("num") #刪除“Z”重復項 df.loc[df['bool'], 'z'] = "" print(df.head(5))結果為
3.按照num列分隔數據存入列表
#計算循環次數 number = df['num'].max() #創建列表存放 按照num列分割開的數據 df_split = [a for a in range(number)] for i in range(number):df_split[i] = df[df.loc[:, 'num']==i+1]print(df_split[i])結果為
4.創建空DataFrame加到上面列表每個元素后
#創建一行空的DataFrame s = pd.DataFrame({"x":[" "], "y":[" "], "num":[" "], "z":[" "], 'bool':[" "]})#將空得DataFrame 加到每個 df_split 后面 for i in range(number):df_split[i] = pd.concat([df_split[i], s], ignore_index = True, sort=False)print(df_split[i])結果為
5.合并列表所有數據,刪除無用行
#準備一個用于 存放全部split的變量 df_merge = df_split[0].copy()for i in range(number - 1):df_merge = pd.concat([df_merge, df_split[i+1]], ignore_index = True, sort = False) df = df_merge.copy() del df['num'] del df['bool'] print(df)結果為:
6.保存成文件
df.to_csv("zmap_to_gm4.txt", sep = '\t', index = False)四、所有代碼匯總
#-*- coding: utf-8 -*- """ Created on Mon Jun 21 11:16:01 2021 將petrel中的等值線以Zmap+格式輸出,然后導入該程序 會覆蓋原文件,可以加載進Geomap4.0 導入等值線即可 @author: gbr """ import pandas as pd import easyguitry:fpath = easygui.fileopenbox()df = pd.read_table(fpath,sep = '\s+', # 表明輸入數據按照空格以及多個空格分列#delim_whitespace = True,header = None,names = ['x', 'y', 'num', 'z'],engine='python')#計算循環次數number = df['num'].max()#新增一列 判斷以num列分組 z值的重復項df'bool'] = df.duplicated("num")#刪除“Z”重復項df.loc[df['bool'], 'z'] = ""#創建列表 存放按照num列分割開的數據 df_split = [a for a in range(number)]for i in range(number):df_split[i] = df[df.loc[:, 'num']==i+1]#創建一行空的DataFrames = pd.DataFrame({"x":[" "], "y":[" "], "num":[" "], "z":[" "], 'bool':[" "]})#將空得DataFrame 加到每個 df_split 后面for i in range(number):df_split[i] = pd.concat([df_split[i], s], ignore_index = True, sort=False)#準備一個用于 存放全部split的變量df_merge = df_split[0].copy()for i in range(number - 1):df_merge = pd.concat([df_merge, df_split[i+1]], ignore_index = True, sort = False)df = df_merge.copy()del df['num']del df['bool']df.to_csv(fpath, sep = '\t', index = False) except Exception as re:print("Error")a= easygui.msgbox(msg = re, title = 'Error', ok_button = "退出")總的代碼里加入了用easygui寫得簡單的圖形界面,方便沒有基礎的人可以使用,而且加入了報錯功能,可以輸出錯誤類型。
由于打包成exe發現執行效率很低,點exe文件運行后好久才能出現圖形界面選擇來選擇文件,所以暫時不知道怎么可以提高運行效率。
總結
以上是生活随笔為你收集整理的petrel软件中的等值线导出然后加入Geomap4.0中成图/用python处理petrel导出的等值线以便于加入Geomap4.0中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用卡口数据绘制路段基本图(出入量法)—
- 下一篇: Android WebView 精简De