Python

[Python] 판다스(pandas)_8. 파일 쓰기/읽기 (CSV, EXCEL, JSON)

걍작 2022. 4. 16. 21:19

#정리

#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))