본문 바로가기

여러가지/Python

Day25 - .csv 파일 및 pandas 라이브러리

● GIT URL : https://github.com/yooyijun15/Python/tree/main/Day25

 

● 학습 내용

1. 파일 불러오기

(파일) weather_data.csv

(ㄱ) 일반

# readlines() : 한 줄씩 불러오기

(변수) data_file, weather

# (ㄱ) 일반
with open('weather_data.csv') as data_file:
    weather = data_file.readlines()
print(weather)

(ㄴ) csv 라이브러리

(변수) data

# reader() : csv reader 객체 생성

# (ㄴ) csv 라이브러리
import csv

with open('weather_data.csv') as data_file:
    # (1) csv reader 객체 생성
    data = csv.reader(data_file)
    # (2) 각 행 출력
    for row in data:
        print(row)

=> 리스트에 원소로 저장된다.

 

2. 특정 칼럼 값 불러오기 - 두번째 열 불러오기

(ㄱ) csv 라이브러리

# (ㄱ) csv 라이브러리
import csv

with open('weather_data.csv') as data_file:
    # (1) csv reader 객체 생성
    data = csv.reader(data_file)
    # (2) 빈 리스트 생성
    temperatures = []
    # (3) 각 행 출력
    for row in data:
        # (4) 특정 열 출력
        if row[1] != "temp":
            # 첫 번째 리스트[1]의 값은 temp, 따라서 제외
            temperatures.append(int(row[1]))
        # print(row)
    print(temperatures)

 

(ㄴ) pandas 라이브러리

# read_csv() : .csv로 파일 읽기

import pandas
data = pandas.read_csv('weather_data.csv')
# (b) 칼럼 식별 및 특정 칼럼 출력
print(data["temp"])
# 동일, print(data.temp)

 

3. pandas 라이브러리

import pandas
# (a) pandas 사용, .csv로 파일 읽기
data = pandas.read_csv('weather_data.csv')
print(data)

# (b) 칼럼 식별 및 특정 칼럼 출력
print(data["temp"])
# 동일, print(data.temp)

# type() : 데이터 구조 확인

# (c) 데이터 구조 확인
print(type(data))  # 데이터프레임
print(type(data["temp"]))  # 시리즈(열)

# to_dict() : 딕셔너리로 변환

# (d) 딕셔너리로 변환
data_dict = data.to_dict()
print(data_dict)

# to_list() : 리스트로 변환

# (e) 특정 칼럼 식별 후 Python 리스트로 변환
temp_list = data["temp"].to_list()
print(temp_list)

# (f) 각종 함수
print(data["temp"].mean())  # 평균
print(data["temp"].max())  # 최대값

# day 열의 값이 Monday를 갖는 특정 행 출력

# (g) 특정 행 출력
print(data[data.day == "Monday"])

 

# (예제) 가장 높은 온도의 행 출력
max_temp = data["temp"].max()
print(data[data.temp == max_temp])
print(data[data.temp == data["temp"].max()])

# day 열의 값이 Monday를 갖는 특정 행에서 temp 열의 값 출력

# (h) 특정 행의 열 출력
monday = data[data.day == "Monday"]
print(monday.temp[0])

print(monday.temp)의 경우 행번호와 함께 출력된다.

 

4) 데이터프레임 생성하기

# DataFrame() : 데이터프레임 생성

# 딕셔너리
data_dict = {
    "students" : ['A', 'B', 'C'],
    "scores" : [55, 70, 92]
}
# 데이터프레임 생성
data = pandas.DataFrame(data_dict)
print(data)

# to_csv() : .csv 변환 및 파일 생성

# .csv 변환 및 파일 생성
data.to_csv("new_data.csv")

 

5) 특정 칼럼 각 값 카운트 - 다람쥐 색 별로 개체 수 출력하기

(pandas 라이브러리

import pandas

# (pandas) .csv 파일 읽기
data = pandas.read_csv('squirrel.csv')

 

 

# (pandas) 버전 1
# 1-1
# DataFrame() : 특정 칼럼(Primary Fur Color) 선택해 데이터 프레임 생성
df = pandas.DataFrame(data["Primary Fur Color"])
# value_counts() : 특정 칼럼의 각 값 개수 세기
count_data = df["Primary Fur Color"].value_counts()
print(count_data)

# 1-2
# 전체 데이터 프레임 특정 칼럼의 각 값 개수 세기
count_data = data["Primary Fur Color"].value_counts()
print(count_data)

 

# (pandas) 버전 2
# 2-1
# Step 1. 데이터 추출
# (1) Primary Fur Color 열의 값이 Gray를 갖는 특정 행 저장
Gray_data = data[data["Primary Fur Color"] == "Gray"]
# (2) 행의 개수 세기
len_Gray = len(Gray_data)
# (3) 출력
print(f"Gray : {len_Gray}")

Cinnamon_data = data[data["Primary Fur Color"] == "Cinnamon"]
len_Cinnamon = len(Cinnamon_data)
print(f"Cinnamon : {len_Cinnamon}")

Black_data = data[data["Primary Fur Color"] == "Black"]
len_Black = len(Black_data)
print(f"Black : {len_Black}")

# Step 2. 딕셔너리 생성
color_data = {
    "Fur color": ["Gray", "Cinnamon", "Black"],
    "Count": [len_Gray, len_Cinnamon, len_Black]
}

# Step 3. 데이터프레임 변환
squirrel_color_data = pandas.DataFrame(color_data)
print(squirrel_color_data)
# to_csv() : .csv 변환 및 파일 생성
squirrel_color_data.to_csv("squirrel_color_data.csv")

 

# # (기타)
from collections import Counter
# Step 1. 리스트 변환
color_list = data["Primary Fur Color"].to_list()
# 내장 함수 set - 리스트 중복 값 제거, 목록 확인
set_color = set(color_list)
# collections 모듈의 Counter - 중복 횟수 카운트
counter_data = Counter(color_list)
# print(set_color)
# print(counter_data)


# 반복문
for color in set_color:
    if str(color).lower() != "nan":
        color_data = data[data["Primary Fur Color"] == color]
        print(f"{color} : {len(color_data)}")

 

[참고] pandas

URL : https://pandas.pydata.org/docs/

 

pandas documentation — pandas 2.2.2 documentation

API reference The reference guide contains a detailed description of the pandas API. The reference describes how the methods work and which parameters can be used. It assumes that you have an understanding of the key concepts.

pandas.pydata.org

URL : https://pandas.pydata.org/docs/reference/index.html

 

API reference — pandas 2.2.2 documentation

This page gives an overview of all public pandas objects, functions and methods. All classes and functions exposed in pandas.* namespace are public. The following subpackages are public. In addition, public functions in pandas.io and pandas.tseries submodu

pandas.pydata.org

 

프로젝트

1) 화면 클릭하여 특정 좌표값 받아오기

from turtle import Turtle, onscreenclick, mainloop
# 화면 클릭하여 특정 좌표 출력하기
def get_mouse_click(x, y):
    print(x, y)
onscreenclick(get_mouse_click)
# 화면 닫히지 않도록
mainloop()

2) 이미지 파일 불러오기

image = "blank_states_img.gif"
screen.addshape(image)
shape(image)

 

● GIT URL : https://github.com/yooyijun15/Python/tree/main/Day25/day-25-us-states-game-start