파이썬 로우데이터 다루는데 질문있습니다!!
조회수 489회
일단 자료형식츤 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 답변
-
- 파일의 텍스트를 읽고,
,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
공식문서 참고하세요
댓글 입력