连接.LAS(文本文件)删除可变数量的标题行,然后另存为文本

2024-10-03 09:16:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在堆栈上找到了这个问题的各种解决方案,但似乎仍然无法理解为什么我的用例不起作用

我有大量要连接的.LAS文件。这些是具有类似格式的基于列的文本文件

文本示例:

# Produced by RMS 12
~VERSION
VERS        .          2                       :CWLS Log Ascii Standard - Version 2
WRAP        .          NO                      :One line per depth step
DLM         .          SPACE                   :Delimiting character (SPACE, TAB or COMMA)

~WELL
# Keyword.Unit         Data Type               Information
# ------------         ---------               -------------------------------
WELL        .          C-34B                   :WELL
STRT        .U.S. ft   53.8099                 :First index value
STOP        .U.S. ft   16129.8099              :Last index value
STEP        .U.S. ft   0.5000                  :Step of index
NULL        .          -999.25                 :NoValue
FLD         .                                  :FIELD
COMP        .                                  :COMPANY
CTRY        .                                  :COUNTRY
DATE        .                                  :DATE DD/MM/YYYY
SRVC        .                                  :SERVICE COMPANY
LOC         .                                  :LOCATION
PROV        .                                  :PROVINCE
UWI         .                                  :UNIQUE WELL ID
X           .U.S. ft   664504.000              :X-coordinate of Well Head
Y           .U.S. ft   5959656.990             :Y-coordinate of Well Head
RKB         .U.S. ft   83.3200                 :RKB
WATER_DEPTH .U.S. ft   0.0000                  :Seabed or ground level

~PARAMETER
# Keyword.Unit         Value                   Description
# ------------         ---------               -------------------------------

~CURVE
# Name.Unit                                    Curve Description
# ---------                                    -----------------
MD          .U.S. ft                           :1 Index
ZoneLog_2018_JAO.                                  :2

~ASCII MD             ZoneLog_2018_JAO
53.8099        -999.25        
54.3099        -999.25        
54.8099        -999.25        
55.3099        -999.25        
55.8099        -999.25        

我想将文件名(“在本例中为01-01”)添加到第一列,然后在~ASCII MD行下方包含数据

也就是说,如果我有一个以上的文件,数据会是这样的:

Well Name   MD  _ZoneLog_JAO
01-01A  5000    9
01-01A  5001    9
01-01A  5002    10
01-01B  4999    9
01-01B  5000    9
01-01B  5001    10
01-01C  4856    8
01-01C  4857    9
01-01C  4859    10

我已尝试使用下面的脚本来完成此(Import multiple csv files into pandas and concatenate into one DataFrame):

import pandas as pd
import os
import glob

merged_files = glob.glob("*.las") #creates a list of all las files

data = [] # pd.concat takes a list of dataframes as an agrument
for LAS in merged_files:
    frame = pd.read_csv(LAS, skiprows=37)
    frame['filename'] = os.path.splitext(LAS) [0]
    data.append(frame)

merge = pd.concat(data, ignore_index=True) #dont want pandas to try an align row indexes

merge.to_csv("Merged_FFM15_ZoneLogs.txt", index=False)

print(merge.columns)
print(merge.shape)

这将创建一个名为“Merged_FFM15_ZoneLogs.txt”的输出文件,这样我就有了这个文件,但格式看起来有点奇怪

Index([u'-0.0000        -999.25        ', u'0.0000         -999.25        ',
       u'filename', u'~ASCII MD             ZoneLog_2018_JAO'],
      dtype='object')
(81456352, 4)

我不知道为什么索引会这样结束。我认为这可能与一个伪造的文件有关,但由于我正在查看1000个文件,我不知道如何找到它?也许这和不规则的分隔符有关?我有点不知所措

它似乎只处理少量文件,而不是我需要合并的1000多个文件。我找到的一个解决文件大小的方法是在64位python上运行它,而不是在32位选项上运行它。这是唯一的办法吗

在一个完美的世界中,我只能在最终文件中保留某些列,然后还可以过滤掉某些行(即在_ZONE_JAO column中有-999.25行)。在我尝试过的各种代码中,我遇到了“内存错误”和TypeError: cannot concatenate object of type '<class 'pandas.io.parsers.TextFileReader'>'; only Series and DataFrame objs are valid错误


Tags: 文件ofpandasindexunitfilesmergemd