测井曲线储量python库lasio解读使用

Lasio是关于las格式测井曲线读写的python库,简介好用。

1、读取LAS文件并显示曲线

pip install lasio即可安装,Lasio读取las文件数据后以numpy的方式存储测井曲线,借助matplotlib显示曲线很方便。

比如通过下面的代码即可读取数据,通过matplotlib可以按照测井数据道显示测井曲线

import  numpy as np
from matplotlib import pyplot as plt
import lasio


filePath =R'D:\welllog'
fileName=filePath+"\A10.las"
print(fileName)

las=lasio.read(fileName)
print(type(las.data))
print(las.data.shape)

#以HeadItem的方式显示曲线文件头
las.version
#以CurveItem的方式显示曲线道头
las.curves
#显示曲线道的名称
print(las.keys())
#显示las.data的数据类型
print(type(las.data))
#显示测井数据体的形状
print(las.data.shape)
#显示测井数据道的数据类型
print(type(las[1]))

fig = plt.figure()
trackNum=las.data.shape[1]

for i in np.arange(1,trackNum):
    ax = fig.add_subplot(1,trackNum-1,i)
    ax.plot(las.data[:,i], las.index)
    ax.set_xlabel(las.keys()[i])
    ax.xaxis.tick_top()
    ax.invert_yaxis()

plt.show()


 

运行结果如下:

<class 'numpy.ndarray'>

(1835, 6)

['DEPT', 'PERM', 'GAMMA', 'POROSITY', 'FLUVIALFACIES', 'NETGROSS']

<class 'numpy.ndarray'>

(1835, 6)

<class 'numpy.ndarray'>

 

2、lasio库提供的函数

Lasio提供的函数有这么多,通过这些函数写出las文件,添加曲线道、删除曲线道,可以分辨地进行测井解释工作。

 

3、通过DataFrame处理测井曲线

把lasio对象转化为pandas的DataFrame可以使用其更多的方法。

df=las.df()

df.head(100)  #可以获取100行的数据示例

df.tail(100)  #可以获取后100行的数据示例

df.describe()  #可以获取每道数据的统计信息,包括数据点个数,均值、方差等。

如果发现某道曲线存在明显的奇异值,可以通过条件化的方法将其赋值为无效值

比如:

df[‘GAMN’][df[‘GAMN’]==-2324.48]=np.nan

可以把’GAMN’曲线道的奇异值-2324.28赋值为无效值np.nan

df.describe()[‘GAMN’]  #统计’GAMN’测井曲线道

通过panda的方法pandas.Series.rolling()方法可以很容易地光滑平均得到新的曲线:

df[‘GAMN_avg’]=df[‘GAMN’].rolling(int(1/las.well.STEP.value), center=True).mean()

然后再把DataFrame对象df返回给LASFILE对象,

las.set_data(df)

再次查看las.curves可以发现已经新添加一道曲线。

4、通过laio创建LAS文件

通过抓取数据的方式创建LAS文件

las=lasio.LASFile()

会产生一整套默认参数,直接定义所需的数据,然后通过add_curve的方式添加即可:

depth=np.arange(10,50,0.5)

synth=np.log10(depth)*5+np.random.random(len(depths))

下面的语句可以把曲线添加到LASFile对象并写出到LAS文件。

In [14]: las.add_curve('DEPT', depths, unit='m')

In [15]: las.add_curve('SYNTH',synth, descr='fake data')

In [16]: las.write('build_v2.las', version=2)

In [17]: las.write('build_v1.2.las', version=1.2)

 

5、lasio的模块组成

lasio包的模块组成

lasio.read(file_ref, **kwargs)

lasio包的7个子模块:

 

(1)lasio.las module

class lasio.las.LASFile(file_ref=None, **read_kwargs)类型

class lasio.las.Las(file_ref=None, **read_kwargs)类型

class lasio.las.JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)

(2)lasio.las_items module

class lasio.las_items.HeaderItem(mnemonic='', unit='', value='', descr='', data=None)类型

class lasio.las_items.CurveItem(mnemonic='', unit='', value='', descr='', data=None)类型

class lasio.las_items.SectionItems(*args, **kwargs)

(3)lasio.reader module

lasio.reader.check_for_path_obj(file_ref)

lasio.reader.open_file(file_ref, **encoding_kwargs)

lasio.reader.open_with_codecs(filename, encoding=None, encoding_errors='replace', autodetect_encoding=True, autodetect_encoding_chars=4000)

lasio.reader.adhoc_test_encoding(filename)

lasio.reader.get_encoding(auto, raw)

lasio.reader.read_file_contents(file_obj, regexp_subs, value_null_subs, ignore_data=False)[source]

lasio.reader.read_data_section_iterative(file_obj, regexp_subs, value_null_subs)

lasio.reader.get_substitutions(read_policy, null_policy)

lasio.reader.parse_header_section(sectdict, version, ignore_header_errors=False, mnemonic_case='preserve')

class lasio.reader.SectionParser(title, version=1.2)类型

lasio.reader.read_line(*args, **kwargs)

lasio.reader.read_header_line(line, pattern=None, section_name=None)

(4)lasio.writer module

lasio.writer.write(las, file_object, version=None, wrap=None, STRT=None, STOP=None, STEP=None, fmt='%.5f', column_fmt=None, len_numeric_field=None, data_width=79, header_width=60)

lasio.writer.get_formatter_function(order, left_width=None, middle_width=None)

lasio.writer.get_section_order_function(section, version, order_definitions={1.2: {'Curves': ['value:descr'], 'Parameter': ['value:descr'], 'Version': ['value:descr'], 'Well': ['descr:value', ('value:descr', ['STRT', 'STOP', 'STEP', 'NULL'])]}, 2.0: {'Curves': ['value:descr'], 'Parameter': ['value:descr'], 'Version': ['value:descr'], 'Well': ['value:descr']}})

lasio.writer.get_section_widths(section_name, items, version, order_func)

(5)lasio.excel module

(6)lasio.defaults module

(7)lasio.exceptions module

 

 

posted @ 2022-08-21 10:13  Oliver2022  阅读(1020)  评论(0编辑  收藏  举报