pandas 기초

조은지·2021년 4월 25일
0

Creating, Reading and Writing

1. Creating Data

Data Frame
테이블을 dataframe이라고 하고 , row와 column으로 이루어져 있다.

pd.DataFrame({'Yes':[50,21]},'No':[131,2]}

out:

YesNo
050131
1212

pd.DataFrame()은 데이터프레임 객체를 생성해내는 생성자이다.
딕셔너리 문법을 사용한다.

Series

pd.Series([1,2,3,4,5])

Series는 하나의 column만을 가지는 데이터 프레임이다.
따라서 인덱스 parameter을 이용해서 이전과 동일한 방식으로 series에 column값을 할당할 수 있다.
그러나 series에는 열 이름이 없고, 전체 이름 하나만 존재한다.

pd.Series([30, 35, 40], index=['2015 Sales', '2016 Sales', '2017 Sales'], name='Product A')

out:

2015 Sales 30
2016 Sales 35
2017 Sales 40
Name: Product A, dtype: int64

2. Reading data files

실제로는 데이터를 생성하는 것보다 이미 있는 데이터를 읽어오는 경우가 많다.
데이터프레임은 다른 타입의 데이터들을 같은 테이블에 정리해서 저장할 수 있다.

csv 파일 읽어서 데이터프레임 타입으로 저장하는 함수

reviews = pd.read_csv("csv파일 경로")

읽어온 csv파일의 크기 확인

reviews.shape

Indexing, Selecting & Assigning

1. Native accessors

reviews에 csv파일을 읽어오고, 해당 csv파일에 country라는 column이 존재한다면

reviews.country

이러한 방식으로 접근이 가능하다.

reviews['country']

이렇게도 접근이 가능하다.

2. Indexing in pandas

python만으로도 인덱싱을 할 수 있지만 pandas에서도 인덱싱 함수를 제공해준다.
loc과 iloc

Index-based selection
iloc은 인덱스 베이스 함수!


loc과 iloc은 둘다 [row][column]표기를 사용한다.
반대로 python에서는 [column][row]표기임!!

reviews.iloc[0]

을 하면 첫번째 행인 Country 데이터를 모두 가져온다.

reviews.iloc[:,0]

':'이라는 연산자는 python에서 모든 것이라는 의미를 가진다.
모든 범위의 데이터를 인덱싱한다는 뜻!
예를 들어 country column의 모든 데이터를 가져올 때 이런 식으로도 가져올 수 있다.

reviews.iloc[[0,1,2],0]

이렇게도 슬라이싱을 해올 수 있다.

Label-based selection
loc은 라벨 기반 인덱싱 함수!

reviews.loc[0, 'country']

이렇게 하면 country column의 맨 첫번째 데이터만 나온다.

reviews.loc[:, ['taster_name', 'taster_twitter_handle', 'points']]

3. Conditional selection

reviews.country == 'Italy'

out:
0 True
1 False
...
129969 False
129970 False

해당 데이터가 'Italy'가 맞는지 boolean값을 리턴해준다.

reviews.loc[reviews.country == 'Italy']

country가 Italy인 행을 모두 출력해준다.

reviews.loc[(reviews.country == 'Italy') & (reviews.points >= 90)]
reviews.loc[(reviews.country == 'Italy') | (reviews.points >= 90)]

and(&), or(|)도 함께 사용이 가능하다.

  • isin 함수
    Is in의 의미를 갖는다.
reviews.loc[reviews.country.isin(['Italy', 'France'])]
  • notnull 함수
    isnull함수도 존재~
reviews.loc[reviews.price.notnull()]

4. Assigning data

reviews['critic'] = 'everyone'
reviews['critic']

out:
0 everyone
1 everyone
...
129969 everyone
129970 everyone
요런 식으로 변경~~

reviews['index_backwards'] = range(len(reviews), 0, -1)
reviews['index_backwards']

이렇게 하면 내림차순으로 인덱싱이 가능하다.

0개의 댓글