티스토리 뷰
파이썬의 딕셔너리를 CSV 파일로 만드는 방법을 배워보자. 과정은 파이썬의 딕셔너리를 판다스의 데이터프레임으로 바꾼다. 그리고 데이터프레임을 to_csv() 메소드를 활용하여 저장한다.
예제를 보면 간단하다. 그러나 저장되는 형식에 대해서도 직관적으로 설명해 보겠다. CSV파일 여는 방법은 아래의 링크를 참고하자.
2021/01/09 - [인공지능(Artificial Intelligence)/python] - [pandas] 시리즈(Series) 기초정리
2021/01/10 - [인공지능(Artificial Intelligence)/python] - [pandas] 판다스 기초 한번에 정리
2021/01/11 - [인공지능(Artificial Intelligence)/python] - [pandas] csv 파일 열기
2021/01/12 - [인공지능(Artificial Intelligence)/python] - [pandas] Excel 파일 열기
2021/01/13 - [인공지능(Artificial Intelligence)/python] - [pandas] JSON 파일 열기
2021/01/14 - [인공지능(Artificial Intelligence)/python] - [pandas] HTML(웹) 불러오기
첫번째
우선 딕셔너리를 데이터 프레임으로 만들자.
import pandas as pd
data = {'name' : [ 'Jerry', 'Riah', 'Paul'],
'algol' : [ "A", "A+", "B"],
'basic' : [ "C", "B", "B+"],
'c++' : [ "B+", "C", "C+"],
}
df = pd.DataFrame(data)
df2 = pd.DataFrame(data)
df2.set_index('name', inplace=True) #name 열을 인덱스로 지정
print(df)
'''
# output
name algol basic c++
0 Jerry A C B+
1 Riah A+ B C
2 Paul B B+ C+
'''
print(df2)
'''
# output
algol basic c++
name
Jerry A C B+
Riah A+ B C
Paul B B+ C+
'''
두번째
df는 name값을 index의 이름값을 지정하지 않고 딕셔너리로 바꾼 후에 모습이고, df2는 set_index()를 활용하여 좀 더 꾸민 코드이다. 이제 to_csv() 매서드를 활용해서 CSV 파일로 바꿔보자.
df.to_csv("./df_sample.csv")
'''
# 결과값
,name,algol,basic,c++
0,Jerry,A,C,B+
1,Riah,A+,B,C
2,Paul,B,B+,C+
'''
df2.to_csv("./df_sample2.csv")
'''
# 결과값
name,algol,basic,c++
Jerry,A,C,B+
Riah,A+,B,C
Paul,B,B+,C+
'''
세번째
사실 CSV 파일은 저장이 완료됐다. 그러나 나는 좀 더 확인해 보고 싶어서 아래 처럼 저장한 csv파일을 다시 출력해 보았다. 그 결과 첫 줄의 결과 값이 다르게 저장되는 것을 알 수 있다.
위의 저장된 CSV 파일을 다시 불러와서 확인해 보자.
result1 = pd.read_csv('./df_sample.csv')
print(result1)
'''
Unnamed: 0 name algol basic c++
0 0 Jerry A C B+
1 1 Riah A+ B C
2 2 Paul B B+ C+
'''
result2 = pd.read_csv('./df_sample2.csv')
print(result2)
'''
name algol basic c++
0 Jerry A C B+
1 Riah A+ B C
2 Paul B B+ C+
'''
result1을 보면 unnamed값이 포함되어 있는 것을 확인 할 수 있다. 따라서 재활용성을 생각해서 필요에 맞게 CSV 파일을 만들어 놓는 것이 중요하다고 할 수 있다.
네번째
그렇다면 인덱스를 지정하지 않을 때 바로 사용할 수 있는 해결법은, index=False를 사용해 주는 것이다. 아래의 예를 보자.
import pandas as pd
data = {'name' : [ 'Jerry', 'Riah', 'Paul'],
'algol' : [ "A", "A+", "B"],
'basic' : [ "C", "B", "B+"],
'c++' : [ "B+", "C", "C+"],
}
df = pd.DataFrame(data)
df2 = pd.DataFrame(data)
df2.set_index('name', inplace=True) #name 열을 인덱스로 지정
print(df)
df.to_csv("./df_sample.csv")
df.to_csv("./df_sample2.csv", index=False)
'''df_sample.csv
,name,algol,basic,c++
0,Jerry,A,C,B+
1,Riah,A+,B,C
2,Paul,B,B+,C+
'''
'''df_sample2.csv
name,algol,basic,c++
Jerry,A,C,B+
Riah,A+,B,C
Paul,B,B+,C+
'''
위와 같이 index=False를 추가하면 인덱스를 무시되어 정확하게 잘 표시 되는 것을 알 수 있다.
응용적용
CSV 파일을 읽고 쓰는 과정을 파이썬으로 우선 구현을 해보고, 그리고 판다스로 구현을 해보면서 서로 비교를 해보겠다.
# 파이썬으로 구현하기
input_file = './numpy/datasets/csv_exam.csv'
output_file = './csv_exam_output.csv'
with open(input_file, 'r', newline='') as reader:
with open(output_file, 'w', newline='') as writer:
#print(reader)
header = reader.readline()
header = header.strip()
header_list = header.split(',')
writer.write(','.join(map(str, header_list))+'\n')
for row in reader:
row=row.strip()
row_list=row.split(',')
writer.write(','.join(map(str, row_list))+'\n')
파이썬으로 구현하려면 python 내장함수인 open을 사용한다. 그리고 strip으로 좌우 빈칸을 제거하고, split으로 리스트로 바꿔준다. 그 후에 리스트를 join과 map으로 정리해서 저장하는 것을 알 수 있다. 그렇다면 판다스를 이용한 같은 코드는 아래와 같다.
input_file = './numpy/datasets/csv_exam.csv'
output_file = './csv_exam_output.csv'
import pandas as pd
data_frame = pd.read_csv(input_file)
data_frame.to_csv(output_file, index=False)
python으로 구현한 코드보다 훨씬 깔끔한 것을 알 수 있다. 아래는 파이썬에 내장된 CSV 모듈을 사용하여 데이터 로딩이 가능하다.
# 3
import csv
input_file = './numpy/datasets/csv_exam.csv'
output_file = './csv_exam_output.csv'
with open(input_file, 'r', newline='') as csv_in_file:
with open(output_file, 'w', newline='') as csv_out_file:
filereader = csv.reader(csv_in_file, delimiter=',')
filewriter = csv.writer(csv_out_file, delimiter=',')
for row_list in filereader:
print(row_list)
filewriter.writerow(row_list)
기본적으로 csv에서는 reader와 writer를 제공해 준다. 그리고 필드 구분자를 delimiter를 활용하여 쉼표로 구분한 것을 알 수 있다. 마지막부분은 한줄씩 적는 것을 알 수 있다.
- Total
- Today
- Yesterday
- login
- Vue
- react
- useHistory 안됨
- 자연어처리
- typescript
- TensorFlow
- read_csv
- DFS
- JavaScript
- vuejs
- Python
- BFS
- nextjs autoFocus
- logout
- mongoDB
- NextJS
- useState
- UserCreationForm
- django
- Deque
- next.config.js
- react autoFocus
- Express
- nodejs
- 자료구조
- Queue
- 클라우데라
- pandas
- error:0308010C:digital envelope routines::unsupported
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |