데이터프레임
member = {
‘Attack’: [111,222,333], #하나의 시리즈로 여겨짐
‘Defence’: [444,555,666],
‘Luck’: [777,888,999]
}
member_df = pd.DataFrame(member)
인덱싱 해서 단일 컬럼에 접근한다면 시리즈가 반환됨
가로가 인덱스, 세로가 컬럼 명
member_df = pd.DataFrame(data=data, columns=columns)
df.shape
→ 행령 크기(모양)을 알 수 있음
df.size
→ 크기!!를 알 수 있음
df.info()
→ info는 메소드이기 때문에 .. 데이터 프레임 정보를 알려줌
df.values
→ 값 만 뽑아준다.
df.dtypes
→ 인덱스와 type으로 이루어진 시리즈를 반환받음
df.index
→ 인덱스 정보
df.columns
→ 컬럼 정보
df.axes
→ 각 축이 어떻게 구성되어있는지를 보여줌
df.sum()
→ 각 열(시리즈)에 대한 합. sum(시리즈)에 sum하면 전체의 합이 나옴
df.sum(axis=0)
→ 열에 대한 합 (디폴트 값이 axis=0, index)
df.sum(axis=1)
→ 수평 방향으로 합. 즉 하나의 레코드 값들을 합함
max, min, mean, median, prod(곱) 모두 axis를 적용해서 사용 가능
df.count()로 null 값이 아닌 데이터 수를 셀 수 있다.
movie_df.describe(percentiles=[.2, .4, .6, .8]).round(1)
numeric_only=Ture
인자를 넘겨줘서 숫자 타입의 컬럼에만 집계함수를 적용하겠다는 의미movie_df.quantile(q=.5, numeric_only=True).round(1)
→ 숫자 데이터에 50% 지점의 값들을 확인할 수 있음movie_df.nlargest(n=5, columns=['IMDB_Rating'])
IMDB_Rating
기준으로 큰 5개의 데이터를 조회하겠다! 라는 뜻movie_df.nsmallest(n=5, columns=['IMDB_Rating','Meta_score'])
movie_df.nsmallest(n=5, columns=['IMDB_Rating','Meta_score'], keep='all')
movie_df.sort_values(by=[''IMDB_Rating','Meta_score'], ascending=False)
movie_df.set_index(’Series_Title’)
movie_df.dropna()
→ 행에 nan이 하나라도 있으면 row 삭제movie_df.dropna(axis=1)
→ nan 값을 포함하는 컬럼 삭제titanic_df = titanic_df.sort_index(key=lambda x:x.str.lower())
.loc[]
.duplicated()
titanic_df[titanic_df.index.duplicated(keep=False)]
처럼 keep을 False로 설정해 모두 중복값으로 표시특정 승객의 등급을 확인하고싶다면?
titanic_df[’승객 이름’, ‘pclass’] → 인덱스와 컬럼이 인자로 들어감
titanic_df[’승객 이름’, [‘pclass’, ‘fare’]] → 두개의 컬럼 값을 확인할 수 있음
titanic_df[[[’승객 이름’], [‘pclass’, ‘fare’]]] → 결과를 데이터프레임으로 받기
iloc
iloc은 인덱스 위치를 참조하고, loc은 인덱스를 참조한다.
iloc을 지향하는 것은 지양해라…
titanic.iloc[5:11] → 슬라이싱에선 마지막 값도 포함
iloc[index_position] → series
iloc[[index_position]] → DataFrame
iloc[[index_position1, 2, 3]] → DataFrame
iloc[index_position, column_position] → 스칼라
iloc[[index_position1, 2, 3], column_position] → series (차원 축소)
iloc[[index_position1, 2, 3], [column_position]] → DataFrame
iloc[index_position, [column_position]] → series (차원 축소)
iloc[:, [column_position1, 2]] → DataFrame
💡 유의미하고 명확하게 사용하게 되는 건 loc이다. 즉 loc의 사용을 지향하자Broadcasting
조건문
마스크를 비트연산자로 묶어 다중의 조건을 사용하기 (&, |, ~)
titanic[male_mask & old_mask] → 같은 차원, 크기의 시리즈니 broadcasting이 발생하지 않음
1_class_mask = titanic[’pclass’]==1
survived_mask = titanic[’survived’]==1
under_fifteen = titanic[’age’]<15
female_mask = titanic[’sex’]==’female
fare_maks = titanic[’fare’]≥250
titanic[1_class_mask & survived_mask & female_mask]
titanic[fare_mask & under_fifteen & survived_mask]
titanic[(femal_mask | uder_fifteen) & survived_mask
범위 지정 필터링 between
series.between(left, right, inclusive=~)
inclusive는 끝 값을 포함할 것인지, left, right, both, neither
upper_20_mask = titanic['age'] >= 20
lower_30_mask = titanic['age'] <= 30
titanic[upper_20_mask & lower_30_mask]
age_20s_mask = titanic['age'].between(20, 30, inclusive='both')
titanic[age_20s_mask]
결측치를 제어해서 조건문을 단순화 시키기
.isin() → 각 요소가 특정 값들에 속하는지 여부
titanic[’pclass’].isin([1,2])
→ 비트연산자와 동일하게 모든 데이터에 대해 bool type의 시리즈가 반환됨.isnull()
.notnull()
- na가 아닌 값에 대해 true를 반환
unknown_age_mask = titanic['age'].isnull() -> 나이가 식별되지 않는 사람(결측치)
known_age_mask = titanic['age'].notnull() -> 나이가 식별된 사람
행렬 인덱스 네이밍 변경