라이브러리[Pandas]

DONGMIN SONG (송동민)·2024년 10월 22일
0

Python

목록 보기
1/2
post-thumbnail

pandas 란?

  1. json, html, csv, hdf5, sql 모두 DataFrame 행열을 가진 표의 형태로 만들어주는 라이브러리다.
  2. Numpy 기반으로 제작되어 해당 라이브러리와 호환성이 좋음
  3. Pandas의 Series: 값과 인덱스로 구성 가능
  4. Pandas의 dataframe: 테이블 형식의 데이터로 열(column), 행(row), 인덱스(index) 로 구성
  5. 리스트, 튜플, 사전 타입의 형태로 데이터를 보관

Pandas의 기능

🔵 불러오기(라이브러리 공통)

  • 보통 pd로 줄여서 별칭을 정한다.

import pandas as pd


🔵 Series

Series 기본


  • 시리즈는 1차원 배열의 값(values)에 대응하는 인덱스(index)를 부여할 수 있다.

기본 리스트 형으로 Series 생성


import pandas as pd

sr = pd.Series([1000, 2000, 3000, 4000],index=["제로 콜라", "콜라", "사이다", "진저비어"])

print(sr)

출력 결과

제로 콜라 1000
콜라 2000
사이다 3000
진저비어 4000
dtype: int64



또한 인덱스 값 없이 사용할 수도 있는데 이 경우 기본 숫자로 배열된다


import pandas as pd

sr = pd.Series([1000, 2000, 3000, 4000], name = "Example")

print(sr)

출력 결과

0 1000
1 2000
2 3000
3 4000
Name: Example, dtype: int64


당연하게도 한가지 인덱스에 대한 값을 뽑아 올 수도 있다.


import pandas as pd

sr = pd.Series([1000, 2000, 3000, 4000],index=["제로 콜라", "콜라", "사이다", "진저비어"])

print(sr['사이다'])

출력 결과
3000


이렇게 만들어진 컬럼의 이름name으로 정할 수 있다.


import pandas as pd

sr = pd.Series([1000, 2000, 3000, 4000],index=["제로 콜라", "콜라", "사이다", "진저비어"], 
name = "Example")

print(sr)

출력 결과

제로 콜라 1000
콜라 2000
사이다 3000
진저비어 4000
Name: Example, dtype: int64


값을 바꿔줄 수 도 있다.


sr = pd.Series([1000, 2000, 3000, 4000],index=["제로 콜라", "콜라", "사이다", "진저비어"])
sr['제로 콜라'] = 5000
print(sr)

출력 결과

제로 콜라 5000
콜라 2000
사이다 3000
진저비어 4000
dtype: int64

슬라이싱 기능도 가능하다.


sr = pd.Series([1000, 2000, 3000, 4000],index=["제로 콜라", "콜라", "사이다", "진저비어"])

print(sr[0:2])

출력 결과

제로 콜라 1000
콜라 2000
dtype: int64

0번째 부터 2번째 이전까지 가져오게 된다.

딕셔너리 형으로 만들고 싶다면 [] 대신 {}로 만들어 주고 {인덱스:값} 으로 만들면 된다.


import pandas as pd

sr = pd.Series({"제로 콜라" : 1000,"콜라" :  2000,"사이다": 3000,"진저비어" : 4000})

print(sr)

출력 결과

제로 콜라 1000
콜라 2000
사이다 3000
진저비어 4000
dtype: int64

🔵 데이터 프레임(DataFrame)

DataFrame의 기본


  • 2차원 데이터로 행과 열을 가지게 되는 데이터 구조다.

기본 DataFrame 생성 방법
인덱스, 열, 값을 가진 2차원 데이터가 만들어진다.
index 가 행, columns가 열


import pandas as pd

values = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
index = ['1행', '2행', '3행']
columns = ['1열', '2열', '3열']

df = pd.DataFrame(values, index=index, columns=columns)

print(df)

출력 결과

    1열  2열  3열
1행   1   2   3
2행   4   5   6
3행   7   8   9

물론 값 열등에 대한 각각의 출력도 가능하다.



import pandas as pd

values = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
index = ['1행', '2행', '3행']
columns = ['1열', '2열', '3열']

df = pd.DataFrame(values, index=index, columns=columns)

print("값 : \n", df.values)
print("인덱스(행): ", df.index)
print("열 : ", df.columns)

출력 결과

값 : 
 [[1 2 3]
 [4 5 6]
 [7 8 9]]
인덱스(행):  Index(['1행', '2행', '3행'], dtype='object')
열 :  Index(['1열', '2열', '3열'], dtype='object')

DataFrame 역시 리스트형 외에 딕셔너리로도 가능하다.


import pandas as pd

data = {
        '1열' : [1, 2, 3],
        '2열' : [4, 5, 6],
        '3열' : [7, 8, 9]
        }

index = ['1행','2행','3행']

df = pd.DataFrame(data, index=index)

print(df)

출력 결과

    1열  2열  3열
1행   1   4   7
2행   2   5   8
3행   3   6   9

DataFrame의 여러 가지 출력 방식

df.head() 을 사용하여 처음부터 어디까지의 행을 조회한다.


import pandas as pd

data = {
        '1열' : [1, 2, 3],
        '2열' : [4, 5, 6],
        '3열' : [7, 8, 9]
        }

index = ['1행','2행','3행']

df = pd.DataFrame(data, index=index)

print(df.head(2)) #<<변경된 부분

출력 결과

    1열  2열  3열
1행   1   4   7
2행   2   5   8

df.tail() 을 사용하면 위와 반대로 역순으로 행을 조회한다.


import pandas as pd

data = {
        '1열' : [1, 2, 3],
        '2열' : [4, 5, 6],
        '3열' : [7, 8, 9]
        }

index = ['1행','2행','3행']

df = pd.DataFrame(data, index=index)

print(df.tail(2)) #<<변경된 부분

출력 결과

    1열  2열  3열
2행   2   5   8
3행   3   6   9

df['열 명칭']을 통해 특정 열만 정해서 조회할 수 있다.


import pandas as pd

data = {
        '1열' : [1, 2, 3],
        '2열' : [4, 5, 6],
        '3열' : [7, 8, 9]
        }

index = ['1행','2행','3행']

df = pd.DataFrame(data, index=index)

print(df['2열'])

출력 결과

1행    4
2행    5
3행    6
Name: 2열, dtype: int64

여기서 loc의 기능을 통해 열의 특정값을 조회 할 수도있다.


import pandas as pd

data = {
        '1열' : [1, 2, 3],
        '2열' : [4, 5, 6],
        '3열' : [7, 8, 9]
        }

df = pd.DataFrame(data)

print(df.loc[1,'2열'])

출력 결과
5

마찬가지로 행에 대해서도 조회가 가능하다.


import pandas as pd

data = {
        '1열' : [1, 2, 3],
        '2열' : [4, 5, 6],
        '3열' : [7, 8, 9]
        }

index = ['1행','2행','3행']

df = pd.DataFrame(data, index=index)

print(df.loc['2행'])

출력 결과

1열 2
2열 5
3열 8
Name: 2행, dtype: int64

이걸 iloc를 이용한 암시적으로 조회 해보자


import pandas as pd

data = {
        '1열' : [1, 2, 3],
        '2열' : [4, 5, 6],
        '3열' : [7, 8, 9]
        }

index = ['1행','2행','3행']

df = pd.DataFrame(data, index=index)

print(df.iloc[1])

출력 결과

1열 2
2열 5
3열 8
Name: 2행, dtype: int64

암시적으로 접근시 0이 1번째임을 늘 기억하자

❗ loc?(명시적 접근) iloc?(암시적 접근)

이때 loc를 쓸지 iloc 을 사용 할지 정할 수 있는데. 행의 이나 열의 이름을 내가 정해 줬다면 보기 좋게 loc(명시적 접근)을 사용하자.

ex)
내가 행이나 열에 이름을 정한경우 (loc)

print(df.loc[1,'2열'])

내가 행이나 열에 이름을 정하지 않아 숫자로 행열이 자동으로 생성된 경우 (iloc)
print(df.iloc[1]) 

물론 암시적 접근도 가능은하나 1번째가 0으로 카운터 되서 덜 직관적이다.


🔵 파일을 가져오고, 저장하고


  • Pandas 에서 CSV, Excel, HTML, SQL, JSON 등 다양한 파일의 데이터를 읽고 데이터 프레임을 만들 수 있다.

그 중 csv파일을 예로 들어 보자.

CSV란?

csv는 필드를 쉼표(,)로 구분한 텍스트 파일이다.
쉼표로 구분되어 있는 데이터 형식을 csv 파일 형식이라고 부르며,
확장자 명이 .csv라고 되어있으면 csv 파일이라고 한다.

CSV파일의 예

파일 저장하기


df.to_csv("c:/tmp/courses.csv") 
#" " 안에 경로와 파일명이 저장된다. c:/asd/asd/(경로)qwdqe(파일 이름).csv(파일 확장자 명칭)

인덱스를 무시하고 저장하기

위 의 방식으로 저장하면 가장 앞열에 번호가 매겨지는 인덱스 열이 하나 생기게 된다. 따라서 이값을 false로 하면 앞에 불필요한 열이 생성되지 않는다. (기본이 ture이므로 어지간하면 적어주자.)!


df.to_csv("c:/tmp/courses.csv", index=False)

파일 가져오기

read_csv로 읽어오면 된다.
이때 csv 파일을 자동으로 데이터 프레임 구조로 바꿔준다.


import pandas as pd

df = pd.read_csv('test.csv') #test에는 해당 파일명을 적어주면 된다. df는 담고싶은 이름이면 된다.

이제 이걸 가져 와서 출력할 때는

print(df)#df=담았던 변수명칭

으로 간단하게 볼 수있다.

🔵 데이터 나열(SQL에서 사용하던 기능)

기본 보기 기능

  • pandas 기능은 아니지만 기본적으로 자주 활용되는 Python내장 함수 이다.

행(가로) 길이 파악

len(df)

len(df): 데이터프레임의 행의 수를 반환합니다. Python의 내장 함수입니다.


테이블 확인

display(df, df2, df3)

display(): 데이터프레임을 시각적으로 출력해주는 함수. Jupyter Notebook 환경에서 사용되며 여러 테이블을 동시에 출력할 수 있습니다.

Pandas가 제공하는 데이터 보기 기능

  • 아래의 코드들이 라이브러리.메서드(변수) 가 아니라 변수.메서드() 로 사용가능 한 이유는 몇몇 라이브러리는 자신들의 라이브러리 기능으로 만들어진 변수는 자동으로 인식해서 간략하게 작동이 가능하게 짜여져 있다.
    ※이 경우 판다스의 데이터프레임으로 만들어진 변수(df)라서 변수.메서드() 가 가능하다.

테이블의 행과 열 갯수 확인

df.shape

df.shape: 데이터프레임의 행과 열의 수를 튜플로 반환합니다. (행 수, 열 수) 형식으로 출력됩니다.


컬럼 타입 확인

df.dtypes

df.dtypes: 각 컬럼의 데이터 타입을 확인할 수 있습니다. 예를 들어 int, float, object 등이 있습니다.


컬럼명 확인

df.columns

df.columns: 데이터프레임의 컬럼명을 인덱스 객체로 반환합니다.


데이터 배열 형태로 확인

df.values

df.values: 데이터프레임의 값을 numpy 배열 형태로 반환합니다.


테이블 기본 구조 확인

df.info()

df.info(): 데이터프레임의 간단한 요약 정보를 출력합니다. 각 컬럼의 데이터 타입, 결측치 개수, 메모리 사용량 등을 확인할 수 있습니다.


기본 통계 요약 확인

df2.describe()

df.describe(): 수치형 데이터의 통계적 요약을 제공합니다. 평균, 표준편차, 최소값, 사분위수, 최대값 등을 반환합니다.


결측치 확인

df.isnull().sum()

df.isnull(): 각 데이터가 결측치(NaN)인지 여부를 Boolean 값으로 반환합니다.
sum(): 컬럼별로 결측치 개수를 합산합니다.


특정 컬럼 가져오기

df.Category
df['Category']
df.iloc[:, 4]

df.Category: 데이터프레임의 컬럼을 속성으로 접근하는 방법. 다만, 컬럼명이 공백 또는 특수문자가 포함되면 이 방법을 사용할 수 없습니다.
df['Category']: 대괄호 연산자를 사용하여 컬럼을 가져오는 방법.
df.iloc[:, 4]: 인덱스를 기반으로 컬럼을 선택하는 방법. iloc은 행과 열을 인덱스 번호로 선택할 수 있습니다.


특정 컬럼 여러 개 가져오기


df[['Category', 'Selling Price']]
df.iloc[:, [4, 7]]

df[['Category', 'Selling Price']]: 여러 컬럼을 대괄호 안에 리스트로 넣어 선택합니다.
df.iloc[:, [4, 7]]: 여러 컬럼을 인덱스 번호로 선택합니다.


특정 컬럼 삭제

df3.drop('Interaction type', axis=1, inplace=True)

df.drop(): 지정된 컬럼이나 행을 삭제하는 함수. axis=1은 컬럼을 기준으로, inplace=True는 원본 데이터프레임에서 직접 변경한다는 의미입니다.


조건에 부합하는 데이터 가져오기

df2.where(df2['Age'] > 50)

df.where(): 주어진 조건을 만족하는 행은 원래 값을 유지하고, 만족하지 않는 행은 NaN으로 반환합니다.


조건에 부합하는 데이터 슬라이싱

mask = ((df2['Age'] > 50) & (df2['Gender'] == 'Male'))
df2[mask]

df2[mask]: 조건을 만족하는 데이터만 필터링하여 반환합니다. mask는 조건을 정의한 불리언 배열입니다.


데이터 그룹핑

df2.groupby('Gender')['Customer ID'].count()
df2.groupby(['Gender', 'Location'])['Customer ID'].count()

df.groupby(): 특정 컬럼을 기준으로 데이터를 그룹화합니다. 여러 기준으로도 그룹화할 수 있습니다.
count(): 그룹화된 데이터의 행 수를 반환합니다.


데이터의 중복 제거

df2.groupby('Location')['Age'].nunique()

nunique(): 중복을 제거한 고유한 값의 개수를 반환합니다. count()는 단순히 행의 수를 반환하고, nunique()는 고유한 값의 수를 반환하는 차이가 있습니다.


  • 계속 추가 예정
profile
데이터 분석가를 꿈꾸고 있습니다.

0개의 댓글

관련 채용 정보