Pandas DataFrame 2
Data Frame (Pandas)
데이터 불러오기
import pandas as pd
df1 = pd.read_csv('Pandas_learn.csv')
df1
Unnamed: 0 | 이름 | 생년월일 | 거주지 | 학교 | 재산(만) | |
---|---|---|---|---|---|---|
0 | 1번 | 윤정호 | 1995-03-03 | 수원 | 동국대 | 5000 |
1 | 2번 | 홍길동 | 1997-07-07 | 서울 | 서울대 | 4000 |
2 | 3번 | 스미스 | 1999-09-09 | 뉴욕 | 하버드 | 2000 |
3 | 4번 | 나카무라 | 1990-04-04 | 도쿄 | 동경대 | 3000 |
이전 글에서 만들어두었던 데이터를 read_csv() 함수를 통해 불러왔다.
저장과 마찬가지로 파일 경로와 파일 명을 입력해서 불러올 수 있다.
데이터 행 추출
df1.iloc[1]
Unnamed: 0 2번
이름 홍길동
생년월일 1997-07-07
거주지 서울
학교 서울대
재산(만) 4000
Name: 1, dtype: object
iloc를 통해 인덱싱을 이용해서 특정 행을 출력 할 수 있다.
df1.iloc[1:]
Unnamed: 0 | 이름 | 생년월일 | 거주지 | 학교 | 재산(만) | |
---|---|---|---|---|---|---|
1 | 2번 | 홍길동 | 1997-07-07 | 서울 | 서울대 | 4000 |
2 | 3번 | 스미스 | 1999-09-09 | 뉴욕 | 하버드 | 2000 |
3 | 4번 | 나카무라 | 1990-04-04 | 도쿄 | 동경대 | 3000 |
파이썬의 슬라이싱을 이용한 인덱싱 또한 가능하다.
복수의 행을 추출할 때는 series가 아닌 dataframe의 형태로 출력 된다.
df1.iloc[1,3]
'서울'
df.iloc[행,열] 방식으로 인덱싱을 함으로서 특정 범위의 값을 추출할 수 있다.
데이터 정렬
df1.sort_values(by='재산(만)')
#df1.sort_values(by='재산(만)',ascending=False)
재산을 기준으로 데이터를 정렬하여 추출하였다.
defalut는 오름차순으로 정렬이 되며, 위 주석과 같이 ascending=False 를 설정해주면 내림차순으로 정렬된다.
정렬의 조건을 여러개 두고 싶다면 by=[‘칼럼1’,’칼럼2’] 의 형식으로 해주면 칼럼1을 기준으로 먼저 정렬해주고 이후에 동일한 값 안에선 칼럼 2를 기준으로 정렬된다.
정렬방식 또한 ascending=[true,false] 의 방식으로 지정 가능하다.
데이터 필터
counts
df1.iloc[1,3]='수원' # 중복값을 만들기 위해 값을 변경함 ㅠ
df1[['거주지']].value_counts()
거주지
수원 2
도쿄 1
뉴욕 1
dtype: int64
칼럼에 동일한 값의 개수를 계산해준다.
특정 항목에 대한 데이터 추출
temp = (df1['거주지']=='수원')
df1.loc[temp]
#df1.loc[(df1['거주지']=='수원')] = 같은 결과이다.
Unnamed: 0 | 이름 | 생년월일 | 거주지 | 학교 | 재산(만) | |
---|---|---|---|---|---|---|
0 | 1번 | 윤정호 | 1995-03-03 | 수원 | 동국대 | 5000 |
1 | 2번 | 홍길동 | 1997-07-07 | 수원 | 서울대 | 4000 |
특정 칼럼에 해당 값을 가진 행만 추출하는 방식이다.
df1.loc[~temp]
Unnamed: 0 | 이름 | 생년월일 | 거주지 | 학교 | 재산(만) | |
---|---|---|---|---|---|---|
2 | 3번 | 스미스 | 1999-09-09 | 뉴욕 | 하버드 | 2000 |
3 | 4번 | 나카무라 | 1990-04-04 | 도쿄 | 동경대 | 3000 |
위 코드처럼 ‘~’ 를 붙여준다면 반대되는 조건의 값만 추출 할 수 있다.
temp2 = (df1['생년월일']=='1995-03-03')
df1.loc[temp & temp2]
Unnamed: 0 | 이름 | 생년월일 | 거주지 | 학교 | 재산(만) | |
---|---|---|---|---|---|---|
0 | 1번 | 윤정호 | 1995-03-03 | 수원 | 동국대 | 5000 |
And 를 의미하는 ‘&’ 를 이용해 두 가지 이상의 조건을 만족하는 항목에 대한 추출도 가능하다. Or의 경우는 ‘ |
‘를 이용해서 표현할 수 있다. |
df1[df1.이름=='윤정호']
Unnamed: 0 | 이름 | 생년월일 | 거주지 | 학교 | 재산(만) | |
---|---|---|---|---|---|---|
0 | 1번 | 윤정호 | 1995-03-03 | 수원 | 동국대 | 5000 |
위 코드처럼 데이터명[데이터명.비교연산자 ‘값’] 의 순서로도 데이터를 필터링해서 추출할 수 있다.
df1.query("거주지 == '수원'")
Unnamed: 0 | 이름 | 생년월일 | 거주지 | 학교 | 재산(만) | |
---|---|---|---|---|---|---|
0 | 1번 | 윤정호 | 1995-03-03 | 수원 | 동국대 | 5000 |
1 | 2번 | 홍길동 | 1997-07-07 | 수원 | 서울대 | 4000 |
query 함수를 통해 SQL 의 where 조건 같은 구조로 데이터를 추출할 수 있다.
단점은 iloc 에 비해 속도가 느리다.
df1.query("(학교 == '서울대') and (거주지 == '수원')")
Unnamed: 0 | 이름 | 생년월일 | 거주지 | 학교 | 재산(만) | |
---|---|---|---|---|---|---|
1 | 2번 | 홍길동 | 1997-07-07 | 수원 | 서울대 | 4000 |
and,or,not 같은 논리 연산자와 in 연산자 또한 사용 가능하다는 장점이 있다.
댓글남기기