본문 바로가기

이론/데이터 분석을 위한 판다스

데이터 가공하기

데이터 병합하기

# 실습을 위한 데이터 프레임 만들기 1
adf = pd.DataFrame({"x1" : ["A","B","C"], 
                    "x2": [1,2,3]})
adf

# 데이터 프레임 만들기 2
bdf = pd.DataFrame({"x1" : ["A","B","D"], 
                    "x3": ["T","F","T"]})
bdf

# 데이터 프레임 만들기 3
cdf = pd.DataFrame({"x1" : ["B","C","D"], 
                    "x2": [2,3,4]})
cdf

  • 70. 왼쪽 열을 축으로 병합하기
pd.merge(adf, bdf, how='left', on='x1')   
# x1을 키로 해서 병합, 왼쪽(adf)를 기준으로
# 왼쪽의 adf에는 D가 없으므로 해당 값은 NaN으로 변환 
  • 71. 오른쪽 열을 축으로 병합하기
pd.merge(adf, bdf, how='right', on='x1')   
# x1을 키로 해서 병합, 오른쪽(bdf)을 기준으로
# 오른쪽의 bdf에는 C가 없으므로 해당 값은 NaN으로 변환 
 
 
  • 72. 공통의 값만 병합
pd.merge(adf, bdf, how='inner', on='x1')

 

  • 73. 모든 값을 병합
pd.merge(adf, bdf, how='outer', on='x1')

  • 74. 특정한 열을 비교하여 공통 값이 존재하는 경우만 가져오기
adf[adf.x1.isin(bdf.x1)]  
# adf와 bdf의 특정한 열을 비교하여 공통 값이 존재하는 경우만 가져오기
# adf.x1열과 bdf.x1열은 A,B가 같다. 따라서 adf의 해당 값만 출력
 
  • 75. 공통 값이 존재하는 경우 해당 값을 제외하고 병합하기
adf[~adf.x1.isin(bdf.x1)]  # 해당 값만 빼고 출력
  • 76. 공통의 값이 있는 것만 병합
pd.merge(adf, cdf)

  • 77. 모두 병합
pd.merge(adf, cdf, how='outer')
  • 78. 어디서 병합되었는지 표시하기
pd.merge(adf, cdf, how='outer', indicator=True)

  • 79. 원하는 병합만 남기기
pd.merge(adf, cdf, how='outer', indicator=True).query('_merge == "left_only"')
 
  • 80. merge 칼럼 없애기
pd.merge(adf, cdf, how='outer', indicator=True).query('_merge == "left_only"').drop(columns=['_merge'])

 

데이터 가공하기

# 실습을 위해 데이터 프레임을 만들어 줍니다.
df = pd.DataFrame(
        {"a" : [4 ,5, 6, 7],   # 열 이름을 지정해 주고 시리즈 형태로 데이터를 저장합니다. 
        "b" : [8, 9, 10, 11],
        "c" : [12, 13, 14, 15]},
        index = [1, 2, 3, 4])  # 인덱스는 1,2,3으로 정해 줍니다.
df

  • 81. 행 전체를 한 칸 아래로 이동하기
df.shift(1)

  • 82. 행 전체를 한 칸 위로 이동하기
df.shift(-1)

  • 83. 윗 행부터 누적해서 더하기
df.cumsum()

  • 84. 새 행과 이전 행을 비교하면서 최댓값을 출력
df.cummax()

  • 85. 새 행과 이전 행을 비교하면서 최솟값을 출력
df.cummin()
 

  • 86. 윗 행부터 누적해서 곱하기
df.cumprod()

 

그룹별로 집계하기

# 실습을 위해 데이터 불러오기
!git clone https://github.com/taehojo/data.git 

# 모두의 딥러닝 15장, 주택 가격 예측 데이터를 불러 옵니다.
df = pd.read_csv("./data/house_train.csv")
df
  • 87. 그룹 지정 및 그룹별 데이터 수 표시
df.groupby(by="YrSold").size()   # 팔린 연도를 중심으로 그룹을 만든 후, 각 그룹별 수를 표시
  • 88. 그룹 지정 후 원하는 칼럼 표시하기
df.groupby(by="YrSold")['LotArea'].mean()   # 팔린 연도를 중심으로 그룹을 만들 후, 각 그룹별 주차장의 넓이를 표시. 
 

  • 89. 밀집도 기준으로 순위 부여하기
df['SalePrice'].rank(method='dense')   # 각 집 값은 밀집도를 기준으로 몇 번째인가

  • 90. 최저 값을 기준으로 순위 부여하기
df['SalePrice'].rank(method='min')    # 각 집 값이 최저 값을 기준으로 몇 번째인가

  • 91. 순위를 비율로 표시하기
df['SalePrice'].rank(pct=True)    # 집 값의 순위를 비율로 표시 (0=가장 싼 집, 1=가장 비싼 집)
 
  • 92. 통일 순위에 대한 처리 방법 정하기
df['SalePrice'].rank(method='first')   # 순위가 같을 때 순서가 빠른 사람을 상위로 처리하기

'이론 > 데이터 분석을 위한 판다스' 카테고리의 다른 글

데이터 변환하기  (0) 2023.02.21
데이터 정렬하기2  (0) 2023.02.14
데이터 다루기  (0) 2023.02.06