Python Pandas 라이브러리 3 (데이터 조작)

Pandas(데이터 조작)


데이터 개수 확인

# 데이터 프레임의 개수 확인
tips.count()
len(tips)
244

기타 데이터 정보 확인

# 데이터프레임 인덱스 보기
tips.index
RangeIndex(start=0, stop=244, step=1)
# 데이터프레임 컬럼 보기
tips.columns
Index(['total_bill', 'tip', 'sex', 'smoker', 'day', 'time', 'size', 'total'], dtype='object')
# 행, 열 구조 보기
tips.values
array([[16.99, 1.01, 'Female', ..., 'Dinner', 2, 18.0],
       [10.34, 1.66, 'Male', ..., 'Dinner', 3, 12.0],
       [21.01, 3.5, 'Male', ..., 'Dinner', 3, 24.51],
       ...,
       [22.67, 2.0, 'Male', ..., 'Dinner', 2, 24.67],
       [17.82, 1.75, 'Male', ..., 'Dinner', 2, 19.57],
       [18.78, 3.0, 'Female', ..., 'Dinner', 2, 21.78]], dtype=object)

정렬

# '지급액' 열(by='total_bill')을 기준으로 index(axis=0)오름차순 정렬하기
tips.sort_values(by=['total_bill'], axis=0)
# 지급액'열(by='total_bill')을 기준으로 index(axis=0) 내림타순 정렬하기 ascending = False 옵션 추가
tips.sort_values(by=['total_bill'], axis=0, ascending=False)
# 열 이름을 (알파벳 순서로) 정렬하기: axis = 1
tips.sort_index(axis=1)

행/열 합계

# 행 합계를 구할 때는 sum(axis=1) 메서드를 사용한다.
tips.sum(axis=1)\
# 열 합계를 구할 때는 sum(axis=0) 매서드를 사용하는데 axis인수의 디폴드 값이 0이므로 axis생략 가능
tips.sum()

교차 분석


빈도 분석

# 성별 범주형 빈도 분석
tips['sex'].value_counts()
# 요일별 범주형 빈도 분석
tips['day'].value_counts()
# 여백 또는 누적값 cumulatives
pd.crosstab(tips['sex'],tips['day'],margins=True)
# 전체 빈도 비율 확인
pd.crosstab(tips['sex'],['day']).apply(lambda r: r/len(tips), axis=1)

연속형 변수 Describe

# 판다스는 describe()함수를 통해 연속형 변수의 기술 통계를 출력한다. 
# 개수(count), 데이터의 평균(mean), 표준편차(std), 최솟값(min), 
# 4분위수(25%, 50%, 75%), 최댓값(max)
tips.describe()

시각화


# 기본 선
tips.plot()    # 또는 tips.plot(kind='line')
# 히스토그램
tips.plot(kind='hist')
# 박스플룻
tips.plot(kind='box')

데이터 병합과 연결


데이터 연결

# 시리즈를 데이터프레임의 새로운 행으로 연결하려면
s1 = pd.Series([0,1], index=['A','B'])
s2 = pd.Series([2,3,4], index=['c','d','e'])
pd.concat([s1,s2])

출력

A    0
B    1
c    2
d    3
e    4
dtype: int64
# 데이터프레임의 열을 연결하고 싶으면 axis=1 을 인수로 설정한다.
df1 = pd.DataFrame([['Dog','3'],['Bird','10'],['Tiger','6'],['Moose','3']], index = ['0','1','2','3'], columns = ['동물','나이'])
df2 = pd.DataFrame([['집','0'],['초원','0'],['수풀','0'],['초원','1']], index = ['0','1','2','3'], columns = ['사는 곳','뿔의 개수'])
pd.concat([df1, df2], axis=1)

출력

	동물	나이	사는 곳	뿔의 개수
0	Dog	3	집	0
1	Bird	10	초원	0
2	Tiger	6	수풀	0
3	Moose	3	초원	1

데이터 병합

df1 = pd.DataFrame({'고객번호':[1001, 1002, 1003, 1004, 1005, 1006, 1007], '이름':['강감찬','홍길동','이순신','장보고','유관순','신사임당','세종대왕']}, columns = ['고객번호','이름'])
df2 = pd.DataFrame({'고객번호':[1001, 1001, 1005, 1006, 1008, 1001],'금액':[10000, 20000, 15000, 5000, 100000, 30000]}, columns=['고객번호','금액'])
# inner join 양쪽 다 같은 것
pd.merge(df1, df2)
# Full join 방식은 키 값이 한쪽에만 있어도 데이터를 출력한다. 전부 출력
pd.merge(df1, df2, how = 'outer')
# left, right 방식은 각각 첫 번째 혹은 두 번쨰 데이터프레임의 키 값을 모두 보여 준다.
pd.merge(df1, df2, how = 'left')
pd.merge(df1, df2, how = 'right')

출력

inner join

고객번호	이름	금액
0	1001	강감찬	10000
1	1001	강감찬	20000
2	1001	강감찬	30000
3	1005	유관순	15000
4	1006	신사임당	5000

full join

	고객번호	이름	금액
0	1001	강감찬	10000.0
1	1001	강감찬	20000.0
2	1001	강감찬	30000.0
3	1002	홍길동	NaN
4	1003	이순신	NaN
5	1004	장보고	NaN
6	1005	유관순	15000.0
7	1006	신사임당	5000.0
8	1007	세종대왕	NaN
9	1008	NaN	100000.0

left join

고객번호	이름	금액
0	1001	강감찬	10000.0
1	1001	강감찬	20000.0
2	1001	강감찬	30000.0
3	1002	홍길동	NaN
4	1003	이순신	NaN
5	1004	장보고	NaN
6	1005	유관순	15000.0
7	1006	신사임당	5000.0
8	1007	세종대왕	NaN

right join

	고객번호	이름	금액
0	1001	강감찬	10000
1	1001	강감찬	20000
2	1001	강감찬	30000
3	1005	유관순	15000
4	1006	신사임당	5000
5	1008	NaN	100000

태그:

카테고리:

업데이트: