2016-12-26 2 views
1

이전에 팬더를 사용하여이 .txt 파일을 입력하는 방법에 대한 질문을 받았습니다. 나는 pandas.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 
+0

의 나머지를 얻으려면 팬더를 사용 고맙습니다 당신의 도움을 위해 – brandog

답변

1

당신은 구분 기호로 주석 표시를 사용하여 파일을 구문 분석 할 수 있습니다 다음 str.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 

데이터

df = pd.read_csv(StringIO(txt), comment='#', delim_whitespace=True) 
df 

enter image description here

+0

굉장! 감사! – brandog

0

그것의 좋은. 나는 단지 이렇게 할 것이다. 그러나 내가 판다에서 그것을 모두 할 수 있는지 알면 좋을 것이다.

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 
관련 문제