Python(데이터 로딩)

짬그브·2025년 2월 28일

텍스트 파일

pandas Datframe 형식으로 읽어오기

색인 :반환하는 DataFrame에서 하나 이상의 칼럼을 색인으로 지정할 수 있다.
자료형 추론과 데이터 변환 : 사용자가 정의 값 변환과 비어있는 값을 위한 사용자 리스트를 포함한다.
날짜 분석: 여러 칼럼에 걸쳐 있는 날짜와 시간 정보를 하나의 칼럼에 조합해서 결과에 반영한다.
반복: 여러 파일에 걸쳐 있는 자료를 반복적으로 읽어 올 수 있다.
정제되지 않은 데이터 처리: 꼬리말, 주석, 천 단위마다 쉼표로 구분된 숫자 등을 처리 해준다.


read_csv : 파일, URL 또는 파일과 유사한 객체로부터 구분된 데이터를 읽어 온다. 데이터 구분자는 쉼표(,)를 기본으로 한다.
read_table : 파일, URL 또는 파일과 유사한 객체로부터 구분된 데이터를 읽어 온다. 데이터 구분자는 탭('\t') 을 기본으로 한다.
read_fwf : 고정폭 칼럼 형식에서 데이터를 읽어온다.(구분자가 없는 데이터)
read_clipboard : 클립보드에 있는 데이터를 읽어온다. 웹페이지에서 표를 긁어올 때 유용하다.

import pandas as pd

frame1 = pd.read_csv('data/ex1.csv')
print(frame1)
print(type(frame1))
print()

frame2 = pd.read_csv('data/ex2.csv',header=None)
print(frame2)
print()

frame3 = pd.read_csv('data/ex2.csv',
                     names=['one','two','three','four','msg'])

print(frame3)
print()
frame3 = pd.read_csv('data/ex2.csv',
                     names=['one','two','three','four','msg'],
                     index_col='msg')
print(frame3)
print()

frame3 = pd.read_csv('data/ex2.csv',
                     names=['one','two','three','four','msg'],
                     index_col=0)
print(frame3)
print()

frame4 = pd.read_csv('data/ex4.csv',skiprows=[0,2,3])
print(frame4)

   a   b   c   d message
0  1   2   3   4   hello
1  5   6   7   8   world
2  9  10  11  12     foo
<class 'pandas.core.frame.DataFrame'>

   0   1   2   3      4
0  1   2   3   4  hello
1  5   6   7   8  world
2  9  10  11  12    foo

   one  two  three  four    msg
0    1    2      3     4  hello
1    5    6      7     8  world
2    9   10     11    12    foo

       one  two  three  four
msg                         
hello    1    2      3     4
world    5    6      7     8
foo      9   10     11    12

     two  three  four    msg
one                         
1      2      3     4  hello
5      6      7     8  world
9     10     11    12    foo

   a   b   c   d message
0  1   2   3   4   hello
1  5   6   7   8   world
2  9  10  11  12     foo

read_csv,read_table 함수 인자

path : 파일 시스템에서의 위치, URL
sep/delimiter : 필드를 구분하기 위해 사용할 연속된 문자나 정규표현식
header : 칼럼의 이름으로 사용할 로우 번호나 이름
index_col : 색인으로 사용할 컬럼 번호나 이름
names : 칼럼 이름으로 사용할 리스트
skiprows : 파일의 시작부터 무시할 로우의 갯 수 또는 무시할 로우 번호가 담긴 리스트
na_values : NA 값으로 처리할 값들의 나열
commet : 주석으로 분류되어 파싱하지 않을 문자 혹은 문자열
parse_dates : 날짜를 datetime 으로 변환 할지의 여부

read_csv,read_table 함수 인자

converters : 변환 시 칼럼에 사용할 함수를 지정한다.
dayfirst : 모호한 날짜 형식을 경우 국제 형식으로 간주한다.(7/6/2012)
date_parse : 날짜 변환 시 사용할 함수
nrow : 파일의 첫 일부만 읽어올 때 몇 줄을 읽을 것인지 지정한다.
iterator : 파일을 조금씩 읽을 때 사용하도록 TextParser 객체를 반환하도록 한다.
chunksize : TextParser 객체에서 사용할, 한 번에 읽을 파일의 크기
verbose : 파싱 결과에 대한 정보를 출력한다.
Encoding : 유니코드 인코딩 종류를 지정한다.
squeeze : 로우가 하나뿐이라면 Series 객체를 반환한다.

import pandas as pd
import numpy as np

from day3.pandasEx8 import sdata

# chunker = pd.read_csv('data/ex6.csv',chunksize=1000)
# print(chunker)
# print()
#
# for piece in chunker:
#     print(piece, end='\n\n')

# sdata1 = pd.Series(['a','b','a','c','d','a','c'])
# print(sdata1)
# print()
# print(sdata1.value_counts())

chunker = pd.read_csv('data/ex6.csv',chunksize=1000)
print(chunker)
print()

tot = pd.Series([], dtype=np.float64)
for piece in chunker:
    tot = tot.add(piece['key'].value_counts(), fill_value=0)

tot - tot.sort_values(ascending=False)
print(tot[:10])




<pandas.io.parsers.readers.TextFileReader object at 0x000001B63B6B7520>

key
0    151.0
1    146.0
2    152.0
3    162.0
4    171.0
5    157.0
6    166.0
7    164.0
8    162.0
9    150.0
dtype: float64


예제

import pandas as pd

frame1 = pd.read_csv('data/quiz_data.csv')
print(frame1)

frame2 = pd.read_csv('data/quiz_data.csv',index_col='name')
print(frame2)

def f3(x):
    return pd.Series([x.max(),x.min(),x.sum(),x.mean()], index=['최고값','최소값','총합','평균'])
result2 = frame2.apply(f3,axis=0).round(1)
print(result2)

   kor  eng  math  sci  name
0  100   88    90   88   kim
1   99   54    67   98   lee
2   89   87    87   61  choi
3   92   85   100   78   hyo
4   56  100    54   87    oh
5   75   98    92   79   jun
      kor  eng  math  sci
name                     
kim   100   88    90   88
lee    99   54    67   98
choi   89   87    87   61
hyo    92   85   100   78
oh     56  100    54   87
jun    75   98    92   79
       kor    eng   math    sci
최고값  100.0  100.0  100.0   98.0
최소값   56.0   54.0   54.0   61.0
총합   511.0  512.0  490.0  491.0
평균    85.2   85.3   81.7   81.8

텍스트 파일 조금씩 읽어오기

데이터를 텍스트 형식으로 기록

JSON(JavaScript Object Notation)파일 읽어오기

Json.loads()을 이용하여 json 문자열을 파이썬 형태로 변환 할 수 있다.

Json.dumps()는 파이썬 객체를 JSON형태로 변환한다.

import json
import pandas as pd

obj = '''
{
    "name":"Wes",
    "place_lived":["United States","Spain","Germany"],
    "siblings":[{"name":"scott","age":25,"pet":"zuko"},
                {"name":"kim","age":30,"pet":"kitty"}]
}
'''

data= json.loads(obj)
print(data)
print(type(data))
print()
print(data['siblings'])
frame = pd.DataFrame(data['siblings'])
print(frame)

{'name': 'Wes', 'place_lived': ['United States', 'Spain', 'Germany'], 'siblings': [{'name': 'scott', 'age': 25, 'pet': 'zuko'}, {'name': 'kim', 'age': 30, 'pet': 'kitty'}]}
<class 'dict'>

[{'name': 'scott', 'age': 25, 'pet': 'zuko'}, {'name': 'kim', 'age': 30, 'pet': 'kitty'}]
    name  age    pet
0  scott   25   zuko
1    kim   30  kitty

xlsx 엑셀 파일 가져오기

pip install openpyxl

설치 후 엑셀 파일 가져오기 가능함

import pandas as pd

frame = pd.read_excel('data/monthly_sales.xlsx', header=1, index_col=0)
print(frame)
print()

frame2 = pd.read_excel('data/class_info.xlsx', header=0, sheet_name='2학년')
print(frame2)
print()

frame2 = pd.read_excel('data/class_info.xlsx', header=0, sheet_name=0)
print(frame2)
print()

data= pd.read_excel('data/class_info.xlsx', header=0, sheet_name=None)
print(data)
print()

print(data['2학년'])

data2 = pd.read_excel('data/class_info.xlsx', header=0, sheet_name=['1학년','2학년'])
print(data2)
print()

            거래처   품명  수량    가격     소계
일자                                   
2020-03-03  박혜리  바나나   3  1000   3000
2020-03-05  김승호   사과   2  1500   3000
2020-03-05  최원필   딸기   2  2000   4000
2020-03-07  노명환  바나나   8  1000   8000
2020-03-15  김승호   사과   2  1500   3000
2020-03-16  노명환   딸기   5  2000  10000
2020-03-20  이영자   망고   3  1900   5700

   번호   이름
0   1  최영빈
1   2  김찬수
2   3  이준혁
3   4  최상준
4   5  임길수
5   6  이상태
6   7  오형웅

   번호   이름
0   1  김이슬
1   2  박예빈
2   3  최솔찬
3   4  이우혁
4   5  강남진
5   6  길일수
6   7  오진영

{'1학년':    번호   이름
0   1  김이슬
1   2  박예빈
2   3  최솔찬
3   4  이우혁
4   5  강남진
5   6  길일수
6   7  오진영, '2학년':    번호   이름
0   1  최영빈
1   2  김찬수
2   3  이준혁
3   4  최상준
4   5  임길수
5   6  이상태
6   7  오형웅}

   번호   이름
0   1  최영빈
1   2  김찬수
2   3  이준혁
3   4  최상준
4   5  임길수
5   6  이상태
6   7  오형웅
{'1학년':    번호   이름
0   1  김이슬
1   2  박예빈
2   3  최솔찬
3   4  이우혁
4   5  강남진
5   6  길일수
6   7  오진영, '2학년':    번호   이름
0   1  최영빈
1   2  김찬수
2   3  이준혁
3   4  최상준
4   5  임길수
5   6  이상태
6   7  오형웅}
profile
+AI to AI+

0개의 댓글