Data Frame
테이블을 dataframe이라고 하고 , row와 column으로 이루어져 있다.
pd.DataFrame({'Yes':[50,21]},'No':[131,2]}
out:
Yes | No | |
---|---|---|
0 | 50 | 131 |
1 | 21 | 2 |
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
실제로는 데이터를 생성하는 것보다 이미 있는 데이터를 읽어오는 경우가 많다.
데이터프레임은 다른 타입의 데이터들을 같은 테이블에 정리해서 저장할 수 있다.
csv 파일 읽어서 데이터프레임 타입으로 저장하는 함수
reviews = pd.read_csv("csv파일 경로")
읽어온 csv파일의 크기 확인
reviews.shape
reviews에 csv파일을 읽어오고, 해당 csv파일에 country라는 column이 존재한다면
reviews.country
이러한 방식으로 접근이 가능하다.
reviews['country']
이렇게도 접근이 가능하다.
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']]
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()]
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']
이렇게 하면 내림차순으로 인덱싱이 가능하다.