파이썬 로우데이터 다루는데 질문있습니다!!

조회수 467회

일단 자료형식츤 txt구요 자료내용은 raw데이터로 엑셀 1행9열로 전부 하나의 행에 전부 들어있습니다.

촬영자료
촬영소 = xx
설치위치 = xxxxxxxxxxxxxx
관측항목 = xxxxxxxxxxxxxxxxxxxxxxxxxxx
관측시간,수온(℃),염분(PSU),전기전도도(ms/m)
2015-04-01 00:00:00,20.6,RB,K,17.31,RB,K,25.7,RB,K
2015-04-01 00:15:00,20.6,RB,K,17.31,RB,K,25.7,RB,K
2015-04-01 00:30:00,20.6,RB,K,17.31,RB,K,25.7,RB,K
2015-04-01 01:00:00,20.6,RB,K,17.31,RB,K,25.7,RB,K

(위)데이터내용입니다.

jupyter에서 진행했습니다

코드는 아래와 같습니다.

import pandas as pd
f= pd.read_csv('test.txt',sep='delimiter',header=None, encoding='cp949', engine='python')
f2= f.drop([0,1,2,3,4],axis=0)

판다스부르고 자료f 받아왔고 서두부분drop으로 내용만 가지고 f2를 생성했습니다. 그런 후 행 제목으로 '관측시간' 값은2015-04-01 00:15:00, 2015-04-01 00:30:00, 2015-04-01 00:45:00, 2015-04-01 01:00:00 수온(℃) 20.6, 20.6, 20.6, 20.6 이 되도록, 이런식으로 행별로 자르기 위해

f3= f2.split(' , ')
or
f3= f2['촬영자료']=f2['관측시간','수온','염분','전기전도도'].str.split(' ',3)

첫번째 스플릿에선 AttributeError: 'DataFrame' object has no attribute 'split' 오류가 있어서 항목을 행에 정해주려고 만드는데 KeyError:('관측시간','수온','염분','전기전도도') 라는 오류가 납니다..

진행하고싶은건 쉼표를 기준으로 잘라서 행으로 묶고 RB와 K를 뺀 나머지를 선택하여 행별로 값이있는 하나의 자료로 묶고싶습니다.

2 답변

  • 좋아요

    0

    싫어요
    채택 취소하기
    • 파일의 텍스트를 읽고, ,RB,K 만 제거한다.
    • StringIO 를 이용해 제거한 텍스트를 read_csv 의 입력으로 제공한다.
    • 필요없는 앞쪽 4줄을 무시하도록 skiprows 옵션을 준다.
    Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license()" for more information.
    >>> text = '''촬영자료
    촬영소 = xx
    설치위치 = xxxxxxxxxxxxxx
    관측항목 = xxxxxxxxxxxxxxxxxxxxxxxxxxx
    관측시간,수온(℃),염분(PSU),전기전도도(ms/m)
    2015-04-01 00:00:00,20.6,RB,K,17.31,RB,K,25.7,RB,K
    2015-04-01 00:15:00,20.6,RB,K,17.31,RB,K,25.7,RB,K
    2015-04-01 00:30:00,20.6,RB,K,17.31,RB,K,25.7,RB,K
    2015-04-01 01:00:00,20.6,RB,K,17.31,RB,K,25.7,RB,K'''
    >>> from io import StringIO
    
    >>> with open("temp.csv", "wt", encoding="cp949") as f:
        f.write(text)
    
    
    305
    
    >>> with open("temp.csv", "rt", encoding="cp949") as f:
        text = f.read()
        print(text)
        print('-'*10)
        text = text.replace(",RB,K", "")
        print(text)
    
    
    촬영자료
    촬영소 = xx
    설치위치 = xxxxxxxxxxxxxx
    관측항목 = xxxxxxxxxxxxxxxxxxxxxxxxxxx
    관측시간,수온(℃),염분(PSU),전기전도도(ms/m)
    2015-04-01 00:00:00,20.6,RB,K,17.31,RB,K,25.7,RB,K
    2015-04-01 00:15:00,20.6,RB,K,17.31,RB,K,25.7,RB,K
    2015-04-01 00:30:00,20.6,RB,K,17.31,RB,K,25.7,RB,K
    2015-04-01 01:00:00,20.6,RB,K,17.31,RB,K,25.7,RB,K
    ----------
    촬영자료
    촬영소 = xx
    설치위치 = xxxxxxxxxxxxxx
    관측항목 = xxxxxxxxxxxxxxxxxxxxxxxxxxx
    관측시간,수온(℃),염분(PSU),전기전도도(ms/m)
    2015-04-01 00:00:00,20.6,17.31,25.7
    2015-04-01 00:15:00,20.6,17.31,25.7
    2015-04-01 00:30:00,20.6,17.31,25.7
    2015-04-01 01:00:00,20.6,17.31,25.7
    
    >>> import pandas as pd
    
    >>> df = pd.read_csv(StringIO(text), skiprows=4)
    >>> df
                      관측시간  수온(℃)  염분(PSU)  전기전도도(ms/m)
    0  2015-04-01 00:00:00   20.6    17.31         25.7
    1  2015-04-01 00:15:00   20.6    17.31         25.7
    2  2015-04-01 00:30:00   20.6    17.31         25.7
    3  2015-04-01 01:00:00   20.6    17.31         25.7
    >>> 
    
  • '''test.txt
    TIME,TEMPER,rb,k,PSU,rb,k,MS/M,rb,k
    2015-04-01 00:15:00,20.6,RB,K,17.31,RB,K,25.7,RB,K
    2015-04-01 00:30:00,20.6,RB,K,17.31,RB,K,25.7,RB,K
    2015-04-01 01:00:00,20.6,RB,K,17.31,RB,K,25.7,RB,K
    '''
    import pandas as pd
    f= pd.read_csv('test.txt',sep=',',header=None, encoding='utf8', engine='python')
    print(f)
    '''
                      TIME  TEMPER  rb  k    PSU rb.1 k.1  MS/M rb.2 k.2
    0  2015-04-01 00:15:00    20.6  RB  K  17.31   RB   K  25.7   RB   K
    1  2015-04-01 00:30:00    20.6  RB  K  17.31   RB   K  25.7   RB   K
    2  2015-04-01 01:00:00    20.6  RB  K  17.31   RB   K  25.7   RB   K
    '''
    f = f.drop(['rb','k','rb.1','k.1','rb.2','k.2'], axis=1)
    print(f)
    '''
                      TIME  TEMPER    PSU  MS/M
    0  2015-04-01 00:15:00    20.6  17.31  25.7
    1  2015-04-01 00:30:00    20.6  17.31  25.7
    2  2015-04-01 01:00:00    20.6  17.31  25.7
    '''
    #REF.https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
    

    공식문서 참고하세요

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)