[Python] 판다스(pandas)_8. 파일 쓰기/읽기 (CSV, EXCEL, JSON)
#정리
#13to_csv - csv파일 작성하기
#csv : ,를 구분자로 하는 파일
#csv 파일 생성
- df_emp.to_csv('pd13a.csv',sep=',') #index,header(column)포함 저장
- df_emp.to_csv('pd13b.csv',sep=',',index=False) #index제거
- df_emp.to_csv('pd13c.csv',sep=',',index=False,header=False) #index,header제거
#전치를 통해 컬럼별로 데이터를 모아둘 수 있다.- df_emp.T.to_csv('pd13d.csv',sep=',',index=False,header=False)
#tap(\t)을 구분자로 지정(.tsv)하여 저장할 수 있다.
- df_emp.to_csv('pd13e.tsv',sep='\t',index=False,header=False) #tap으로 구분자 설정#16read_csv - csv파일 읽기
#csv파일 읽기
- df = pd.read_csv('pd13a.csv')
#헤더를 없앨 수 있다. >> 헤더가 데이터 라인으로 내려감
- df = pd.read_csv('pd13b.csv',header=None)
#컬럼이 없을 때 붙여줄 수 있다.
- df = pd.read_csv('pd13c.csv',sep=',',names=['사번','이름','급여','부서명','지역'])
#(tsv일 때)컬럼이 없을 때 붙여줄 수 있다.
- df = pd.read_csv('pd13e.tsv',sep='\t',names=['사번','이름','급여','부서명','지역'])
#14to_excel - 엑셀 작성하기
#pip3 install xlwt (엑셀 2003 이하는 .xls)
#pip3 install openpyxl (엑셀 2007이상은 .xlsx)
#excel file open : menu >> office >> calc
- 엑셀파일 설정 변경 시 열려있는 파일을 닫고, 다시 열 것.#엑셀파일 작성
- df.to_excel("pd14ex.xls", index=False, sheet_name="2022", startrow=1,startcol=1)
>> 파일 이름, 인덱스 포함 여부, 시트명, 표 작성 시작 행/열
#별도의 시트에 데이터 저장하기
<1. 시트명을 일일히 작성 : 시트명에 규칙성이 없을 때>
- with pd.ExcelWriter('pd14ex2.xls') as f:
>> df.to_excel(f,index=False,sheet_name="2022")
>> df2.to_excel(f,index=False,sheet_name="2023")
<2. 반복문으로 시트 추가하기 : 시트명의 명명 규칙이 있을 때>
- lst_df = [df, df2, df3] #loop를 돌리기 위해 데이터 프레임을 리스트에 모음- with pd.ExcelWriter('pd14ex3.xls') as f:
>> for i,x in enumerate(lst_df):
>> x.to_excel(f,index=False,sheet_name="202{}".format(i+2))
#17read_excel - excel 파일 읽기
#pip3 install xlrd #읽기 전용 패키지 설치 필요
#엑셀 데이터 읽기
** 엑셀 표가 A1(0,0)이 아닌, B2 (1,1)부터 시작하면 한 줄씩 공백이 생긴다.
- df = pd.read_excel('pd14ex.xls')
#엑셀 파일 관련 함수
- print(pd.ExcelFile('pd14ex2.xls')) #파일 객체 정보
- print(pd.ExcelFile('pd14ex2.xls').sheet_names) #엑셀파일이 가지고 있는 시트 출력
#엑셀파일에 시트가 여러 개 있는 경우** 여러 시트가 있는 경우 제일 앞에 시트만 불러온다.
- df = pd.read_excel('pd14ex2.xls') >>2022, 2023시트 중 2022만 반환
- df = pd.read_excel('pd14ex2.xls',sheet_name='2022')
- df = pd.read_excel('pd14ex2.xls',sheet_name='2023')
#xlsx는 읽기 전용 패키지를 따로 설치하지 않아도 바로 읽어올 수 있다.
- df = pd.read_excel('pd14ex4.xlsx',sheet_name='2022')
- df = pd.read_excel('pd14ex4.xlsx',sheet_name='2023')
#15to_json - json형식으로 데이터 변환#json형식으로 변환
- df_emp.to_json('pd15a.json')
>> {"emp_id":{"0":100,"1":101,,,,}} >> (기본 설정) 원래 보던 json 형식이 아니라 사용이 불편
- df_emp.to_json('pd15b.json',orient='records')>> [{"emp_id":100,"name":"kim",,,,}] >> 원래 보던 json 형식 출력
- df_emp.to_json('pd15c.json',orient='split')
>> {"columns":["emp_id","name",,,],"index":[0,1,,,],"data":[[100,"kim",,],[],... >> 컬럼, 인덱스, 값을 분리하여 생성
- df_emp.to_json('pd15d.json',orient='values')
>> [[100,"kim",8000000,,,],[101,,,],[] >> 데이터 배열로만 생성#18read_json - json 파일 읽기
#json형식의 데이터를 바로 데이터프레임에 넣어도 된다.
- print(pd.DataFrame([jsonData])
#json 데이터 정리 옵션에 상관없이 읽어들일 수 있다.
- df = pd.read_json('pd15b.json') #orient='records' 옵션 적용
- df = pd.read_json('pd15a.json') #옵션 미적용#read_json을 통해 읽은 데이터를 추출할 수 있다.
- print("sum:",pd.read_json('pd15b.json')['salary'].sum()) #sum, mean, var, std, count..
- print("sum:\n",pd.read_json('pd15score.json')[['kor','eng','math']].sum()) #indexing
- print("[0:1]\n",pd.read_json('pd15score.json')[0:1]) #slicing
- print("iloc[0:1,[1,2,3]]\n",pd.read_json('pd15score.json').iloc[0:1,[1,2,3]])
#13to_csv - csv파일 작성하기
#csv : ,를 구분자로 하는 파일
#csv 파일 생성
- df_emp.to_csv('pd13a.csv',sep=',') #index,header(column)포함 저장
- df_emp.to_csv('pd13b.csv',sep=',',index=False) #index제거
- df_emp.to_csv('pd13c.csv',sep=',',index=False,header=False) #index,header제거
#전치를 통해 컬럼별로 데이터를 모아둘 수 있다.
- df_emp.T.to_csv('pd13d.csv',sep=',',index=False,header=False)
#tap(\t)을 구분자로 지정(.tsv)하여 저장할 수 있다.
- df_emp.to_csv('pd13e.tsv',sep='\t',index=False,header=False) #tap으로 구분자 설정
--예문 코드 보기--
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
#from numpy import *
#from pandas import Series,DataFrame
# >> Series,DataFrame 는 pd.Series라고 안적고, pd. 까지만 적어도 된다.
print("numpy version",pd.__version__) #pandas version check
print("---------------")
emp = {
'emp_id':[100,101,200,201,300,400],
'name':('kim','lee','choi','han','gang','yoon'),
'salary':[8000000,7000000,7500000,5000000,4000000,6000000],
'dept_id':[1,1,2,2,3,4],
'location':['seoul','seoul','busan','busan','daegu','incheon']
}
df_emp = pd.DataFrame(emp)
print(df_emp)
df_emp.to_csv('pd13a.csv',sep=',') #index,header(column)포함 저장
df_emp.to_csv('pd13b.csv',sep=',',index=False) #index제거
df_emp.to_csv('pd13c.csv',sep=',',index=False,header=False) #index,header제거
#pd13a.csv 파일을 확인할 수 있다.
print("--df_emp.T----")
df_emp.T.to_csv('pd13d.csv',sep=',',index=False,header=False)
print("--xxx.tsv,sep='\t' -- ----")
df_emp.to_csv('pd13e.tsv',sep='\t',index=False,header=False) #tap으로 구분자 설정
print("---------------")
#14to_excel - 엑셀 작성하기
#pip3 install xlwt (엑셀 2003 이하는 .xls)
#pip3 install openpyxl (엑셀 2007이상은 .xlsx)
#excel file open : menu >> office >> calc
- 엑셀파일 설정 변경 시 열려있는 파일을 닫고, 다시 열 것.
#엑셀파일 작성
- df.to_excel("pd14ex.xls", index=False, sheet_name="2022", startrow=1,startcol=1)
>> 파일 이름, 인덱스 포함 여부, 시트명, 표 작성 시작 행/열
#별도의 시트에 데이터 저장하기
<1. 시트명을 일일히 작성 : 시트명에 규칙성이 없을 때>
- with pd.ExcelWriter('pd14ex2.xls') as f:
>> df.to_excel(f,index=False,sheet_name="2022")
>> df2.to_excel(f,index=False,sheet_name="2023")
<2. 반복문으로 시트 추가하기 : 시트명의 명명 규칙이 있을 때>
- lst_df = [df, df2, df3] #loop를 돌리기 위해 데이터 프레임을 리스트에 모음
- with pd.ExcelWriter('pd14ex3.xls') as f:
>> for i,x in enumerate(lst_df):
>> x.to_excel(f,index=False,sheet_name="202{}".format(i+2))
--예문 코드 보기--
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
#from numpy import *
#from pandas import Series,DataFrame
# >> Series,DataFrame 는 pd.Series라고 안적고, pd. 까지만 적어도 된다.
print("numpy version",pd.__version__) #pandas version check
print("---------------")
dic = {
'data':['2022-12-25','2022-12-26','2022-12-27'],
'kor':[91,91,93],
'eng':[91,91,93],
'math':[91,91,93]
}
df = pd.DataFrame(dic)
print(df)
#pip3 install xlwt
#excel file open : menu >> office >> calc
#엑셀파일 설정 변경 시 열려있는 파일을 닫고, 다시 열 것.
df.to_excel("pd14ex.xls",
index=False,
sheet_name="2022",
startrow=1,startcol=1)
print("---------------")
dic = {
'data':['2023-12-25','2023-12-26','2023-12-27'],
'kor':[91,91,93],
'eng':[91,91,93],
'math':[91,91,93]
}
df2 = pd.DataFrame(dic)
print(df2)
#시트명을 일일히 작성 >> 시트명에 규칙성이 없을 때
with pd.ExcelWriter('pd14ex2.xls') as f:
df.to_excel(f,index=False,sheet_name="2022")
df2.to_excel(f,index=False,sheet_name="2023")
print("---------------")
dic = {
'data':['2024-12-25','2024-12-26','2024-12-27'],
'kor':[91,91,93],
'eng':[91,91,93],
'math':[91,91,93]
}
df3 = pd.DataFrame(dic)
print(df3)
#반복문으로 시트 추가하기 .> 시트명의 명명 규칙이 있을 때
lst_df = [df, df2, df3] #loop를 돌리기 위해 데이터 프레임을 리스트에 모음
with pd.ExcelWriter('pd14ex3.xls') as f:
for i,x in enumerate(lst_df):
x.to_excel(f,index=False,sheet_name="202{}".format(i+2))
#엑셀 2007이상은 .xlsx
#pip3 install openpyxl
with pd.ExcelWriter('pd14ex4.xlsx') as f:
for i,x in enumerate(lst_df):
x.to_excel(f,index=False,sheet_name="202{}".format(i+2))
#15to_json - json형식으로 데이터 변환
#json형식으로 변환
- df_emp.to_json('pd15a.json')
>> {"emp_id":{"0":100,"1":101,,,,}} >> (기본 설정) 원래 보던 json 형식이 아니라 사용이 불편
- df_emp.to_json('pd15b.json',orient='records')
>> [{"emp_id":100,"name":"kim",,,,}] >> 원래 보던 json 형식 출력
- df_emp.to_json('pd15c.json',orient='split')
>> {"columns":["emp_id","name",,,],"index":[0,1,,,],"data":[[100,"kim",,],[],... >> 컬럼, 인덱스, 값을 분리하여 생성
- df_emp.to_json('pd15d.json',orient='values')
>> [[100,"kim",8000000,,,],[101,,,],[] >> 데이터 배열로만 생성
--예문 코드 보기--
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
print("---------------")
emp = {
'emp_id':[100,101,200,201,300,400],
'name':('kim','lee','choi','han','gang','yoon'),
'salary':[8000000,7000000,7500000,5000000,4000000,6000000],
'dept_id':[1,1,2,2,3,4],
'location':['seoul','seoul','busan','busan','daegu','incheon']
}
df_emp = pd.DataFrame(emp)
print(df_emp)
df_emp.to_json('pd15a.json')
#{"emp_id":{"0":100,"1":101,,,,}} >> 원래 보던 json 형식이 아니라 사용이 불편
df_emp.to_json('pd15b.json',orient='records')
#[{"emp_id":100,"name":"kim",,,,}] >> 원래 보던 json 형식 출력
df_emp.to_json('pd15c.json',orient='split')
#컬럼, 인덱스, 값을 분리하여 생성
#{"columns":["emp_id","name",,,],"index":[0,1,,,],"data":[[100,"kim",,],[],...
df_emp.to_json('pd15d.json',orient='values')
#[[100,"kim",8000000,,,],[101,,,],[] >> 데이터 배열로만 생성
print("---------------")
dic = {
'data':['2023-12-25','2023-12-26','2023-12-27'],
'kor':[91,91,93],
'eng':[91,91,93],
'math':[91,91,93]
}
df = pd.DataFrame(dic)
print(df)
df.to_json('pd15score.json',orient='records')
#16read_csv - csv파일 읽기
#csv파일 읽기
- df = pd.read_csv('pd13a.csv')
#헤더를 없앨 수 있다. >> 헤더가 데이터 라인으로 내려감
- df = pd.read_csv('pd13b.csv',header=None)
#컬럼이 없을 때 붙여줄 수 있다.
- df = pd.read_csv('pd13c.csv',sep=',',names=['사번','이름','급여','부서명','지역'])
#(tsv일 때)컬럼이 없을 때 붙여줄 수 있다.
- df = pd.read_csv('pd13e.tsv',sep='\t',names=['사번','이름','급여','부서명','지역'])
--예문 코드 보기--
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
print("---------------")
df = pd.read_csv('pd13a.csv')
print(df)
print("---------------")
df = pd.read_csv('pd13b.csv')
print(df)
print("---------------")
#헤더를 없앨 수 있다. >> 헤더가 데이터 라인으로 내려감
df = pd.read_csv('pd13b.csv',header=None)
print(df)
print("---------------")
#컬럼이 없을 때 붙여줄 수 있다.
df = pd.read_csv('pd13c.csv',sep=',',names=['사번','이름','급여','부서명','지역'])
print(df)
print("---------------")
#컬럼이 없을 때 붙여줄 수 있다.
df = pd.read_csv('pd13e.tsv',sep='\t',names=['사번','이름','급여','부서명','지역'])
print(df)
#17read_excel - excel 파일 읽기
#pip3 install xlrd #읽기 전용 패키지 설치 필요
#엑셀 데이터 읽기
** 엑셀 표가 A1(0,0)이 아닌, B2 (1,1)부터 시작하면 한 줄씩 공백이 생긴다.
- df = pd.read_excel('pd14ex.xls')
#엑셀 파일 관련 함수
- print(pd.ExcelFile('pd14ex2.xls')) #파일 객체 정보
- print(pd.ExcelFile('pd14ex2.xls').sheet_names) #엑셀파일이 가지고 있는 시트 출력
#엑셀파일에 시트가 여러 개 있는 경우
** 여러 시트가 있는 경우 제일 앞에 시트만 불러온다.
- df = pd.read_excel('pd14ex2.xls') >>2022, 2023시트 중 2022만 반환
- df = pd.read_excel('pd14ex2.xls',sheet_name='2022')
- df = pd.read_excel('pd14ex2.xls',sheet_name='2023')
#xlsx는 읽기 전용 패키지를 따로 설치하지 않아도 바로 읽어올 수 있다.
- df = pd.read_excel('pd14ex4.xlsx',sheet_name='2022')
- df = pd.read_excel('pd14ex4.xlsx',sheet_name='2023')
--예문 코드 보기--
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
print("---------------")
#pip3 install xlrd #읽기 전용 패키지 설치 필요
df = pd.read_excel('pd14ex.xls')
print(df) #데이터가 1,1부터 시작해서 한 줄씩 공백이 생긴다.
print("----ExcelFile()----")
#파일 객체 정보
print(pd.ExcelFile('pd14ex2.xls'))
print("----ExcelFile('pd14ex2.xls').sheet_names----")
#엑셀파일이 가지고 있는 시트 출력
print(pd.ExcelFile('pd14ex2.xls').sheet_names)
print("---pd14ex2.xls-----")
#여러 시트가 있는 경우 제일 앞에 시트만 불러온다.
df = pd.read_excel('pd14ex2.xls')
print(df)
print("----sheet_name='2022'-----")
df = pd.read_excel('pd14ex2.xls',sheet_name='2022')
print(df)
print("----sheet_name='2023'----")
df = pd.read_excel('pd14ex2.xls',sheet_name='2023')
print(df)
print("----xlsx----")
#xlsx는 읽기 전용 패키지를 따로 설치하지 않아도 바로 읽어올 수 있다.
df = pd.read_excel('pd14ex4.xlsx',sheet_name='2022')
print(df)
df = pd.read_excel('pd14ex4.xlsx',sheet_name='2023')
print(df)
#18read_json - json 파일 읽기
#json형식의 데이터를 바로 데이터프레임에 넣어도 된다.
- print(pd.DataFrame([jsonData])
print(pd.DataFrame([
{"emp_id":100,"name":"kim","salary":8000000,"dept_id":1,"location":"seoul"},
{"emp_id":101,"name":"lee","salary":7000000,"dept_id":1,"location":"seoul"},
{"emp_id":200,"name":"choi","salary":7500000,"dept_id":2,"location":"busan"},
{"emp_id":201,"name":"han","salary":5000000,"dept_id":2,"location":"busan"},
{"emp_id":300,"name":"gang","salary":4000000,"dept_id":3,"location":"daegu"},
{"emp_id":400,"name":"yoon","salary":6000000,"dept_id":4,"location":"incheon"}
]))
#json 데이터 정리 옵션에 상관없이 읽어들일 수 있다.
- df = pd.read_json('pd15b.json') #orient='records' 옵션 적용
- df = pd.read_json('pd15a.json') #옵션 미적용
#read_json을 통해 읽은 데이터를 추출할 수 있다.
- print("sum:",pd.read_json('pd15b.json')['salary'].sum()) #sum, mean, var, std, count..
- print("sum:\n",pd.read_json('pd15score.json')[['kor','eng','math']].sum()) #indexing
- print("[0:1]\n",pd.read_json('pd15score.json')[0:1]) #slicing
- print("iloc[0:1,[1,2,3]]\n",pd.read_json('pd15score.json').iloc[0:1,[1,2,3]])
--예문 코드 보기--
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
print("---------------")
#json형식의 데이터를 바로 데이터프레임에 넣어도 된다.
print(pd.DataFrame([{"emp_id":100,"name":"kim","salary":8000000,"dept_id":1,"location":"seoul"},{"emp_id":101,"name":"lee","salary":7000000,"dept_id":1,"location":"seoul"},{"emp_id":200,"name":"choi","salary":7500000,"dept_id":2,"location":"busan"},{"emp_id":201,"name":"han","salary":5000000,"dept_id":2,"location":"busan"},{"emp_id":300,"name":"gang","salary":4000000,"dept_id":3,"location":"daegu"},{"emp_id":400,"name":"yoon","salary":6000000,"dept_id":4,"location":"incheon"}]))
print("---------------")
#json 정리 옵션에 상관없이 읽어들일 수 있다.
df = pd.read_json('pd15b.json')
print(df)
print("---------------")
df = pd.read_json('pd15a.json')
print(df)
print("----응용(salary)------")
#json 정리 옵션에 상관없이 읽어들일 수 있다.
print("sum:",pd.read_json('pd15b.json')['salary'].sum())
print("mean:",pd.read_json('pd15b.json')['salary'].mean())
print("var:",pd.read_json('pd15b.json')['salary'].var())
print("std:",pd.read_json('pd15b.json')['salary'].std())
print("count:",pd.read_json('pd15b.json')['salary'].count())
print("-----------------")
print(pd.read_json('pd15score.json'))
print("sum:\n",pd.read_json('pd15score.json')[['kor','eng','math']].sum())
print("mean:\n",pd.read_json('pd15score.json')[['kor','eng','math']].mean())
print("[0:1]\n",pd.read_json('pd15score.json')[0:1])
print("-----------------")
print("iloc[0:1,[1,2,3]]\n",pd.read_json('pd15score.json').iloc[0:1,[1,2,3]])
print("iloc[:,[1,2,3]]\n",pd.read_json('pd15score.json').iloc[:,[1,2,3]])
str_score = '[{"data":"2023-12-25","kor":91,"eng":91,"math":91},{"data":"2023-12-26","kor":91,"eng":91,"math":91},{"data":"2023-12-27","kor":93,"eng":93,"math":93}]'
print(pd.read_json(str_score))