使用Pandas从文本文件中提取头数据

2024-09-28 13:11:36 发布

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

我以前问过如何使用pandas输入这个.txt文件的问题。 我在试着熊猫.read_csv在

我发现,我无法使用read_csv读取这个文件,除非我删除了头数据(一直到“#”)。在

问题是,我需要提取数据,比如,Well Name,Well KB,Well Type。。。从标题数据。有没有办法用熊猫做到这一点? 或者我只能用其他方式进入吗?在

我最初的问题是:

Pandas.read_csv error tokenizing data

原始文本文件:

# WELL TRACE FROM PETREL 
# WELL NAME:              ZZ-0113
# WELL HEAD X-COORDINATE: 9999999.00000000 (m)
# WELL HEAD Y-COORDINATE: 9999999.00000000 (m)
# WELL KB:                159.00000000 (ft)
# WELL TYPE:              OIL
# MD AND TVD ARE REFERENCED (=0) AT KB AND INCREASE DOWNWARDS
# ANGLES ARE GIVEN IN DEGREES
# XYZ TRACE IS GIVEN IN COORDINATE SYSTEM WGS_1924_UTM_Zone_42N
# AZIMUTH REFERENCE TRUE NORTH
# DX DY ARE GIVEN IN GRID NORTH IN m-UNITS
# DEPTH (Z, TVD) GIVEN IN ft-UNITS
#======================================================================================================================================
      MD              X              Y             Z           TVD           DX           DY          AZIM          INCL          DLS
#======================================================================================================================================
 0.0000000000   999999.00000 9999999.0000 159.00000000 0.0000000000 0.0000005192 -0.000000000 1.3487006929 0.0000000000 0.0000000000
 132.00000000   999999.08032 9999999.9116 27.000774702 131.99922530 0.0803153923 -0.088388779 139.08870069 0.3400000000 0.2575757504
 221.00000000   999999.19115 9999999.8017 -61.99775149 220.99775149 0.1911487882 -0.198290891 132.93870069 0.3200000000 0.0456726104

Tags: 文件csv数据incoordinatereadkbtrace
2条回答

很好。我就这样做。但如果我能在熊猫身上做到这一切,那就太好了。在

 fh = open(filePath)
    lst =[]
    for line in fh:
        if line.startswith('# WELL NAME:'):
            line.rstrip()
            lst = line.split()
            wellName = lst[3]
            print (wellname)
            #print (lst)  
        if line.startswith('# WELL KB'):
            line.rstrip()
            lst = line.split()
            kb = lst[3]
            print (kb)
            #print (lst)      
        if line.startswith('# WELL TYPE'):
            line.rstrip()
            lst = line.split()
            wellType = lst[3]
            print (wellType)
            #print (lst)        
        continue

您可以用注释指示符作为分隔符分析文件,然后使用pandasstr.extract

from io import StringIO
import pandas as pd

txt = """# WELL TRACE FROM PETREL 
# WELL NAME:              ZZ-0113
# WELL HEAD X-COORDINATE: 9999999.00000000 (m)
# WELL HEAD Y-COORDINATE: 9999999.00000000 (m)
# WELL KB:                159.00000000 (ft)
# WELL TYPE:              OIL
# MD AND TVD ARE REFERENCED (=0) AT KB AND INCREASE DOWNWARDS
# ANGLES ARE GIVEN IN DEGREES
# XYZ TRACE IS GIVEN IN COORDINATE SYSTEM WGS_1924_UTM_Zone_42N
# AZIMUTH REFERENCE TRUE NORTH
# DX DY ARE GIVEN IN GRID NORTH IN m-UNITS
# DEPTH (Z, TVD) GIVEN IN ft-UNITS
#======================================================================================================================================
      MD              X              Y             Z           TVD           DX           DY          AZIM          INCL          DLS
#======================================================================================================================================
 0.0000000000   999999.00000 9999999.0000 159.00000000 0.0000000000 0.0000005192 -0.000000000 1.3487006929 0.0000000000 0.0000000000
 132.00000000   999999.08032 9999999.9116 27.000774702 131.99922530 0.0803153923 -0.088388779 139.08870069 0.3400000000 0.2575757504
 221.00000000   999999.19115 9999999.8017 -61.99775149 220.99775149 0.1911487882 -0.198290891 132.93870069 0.3200000000 0.0456726104"""

header_parse = pd.read_csv(StringIO(txt), sep='#', skipinitialspace=True, header=None)
hd = header_parse.iloc[:, 1].dropna()

hd.str.extract('\s*(?P<key>[^:]+)\s*:\s*(?P<value>.+)', expand=True).dropna()

                      key                 value
1               WELL NAME               ZZ-0113
2  WELL HEAD X-COORDINATE  9999999.00000000 (m)
3  WELL HEAD Y-COORDINATE  9999999.00000000 (m)
4                 WELL KB     159.00000000 (ft)
5               WELL TYPE                   OIL

获取其余数据

^{pr2}$

enter image description here

相关问题 更多 >

    热门问题