[Pandas] 데이터 분석을 위한 판다스 사용법 - 4. 데이터 가공 : 자료구조와 원소 변경하기

2023. 7. 5. 23:44
반응형

Pandas

파이썬에서 데이터 분석에 많이 이용함, 3가지 형태의 자료 구조와 연산 지원

 

연산

- 데이터 선택
- 데이터 가공
- 데이터 분석

- 데이터 편집



데이터 가공

자료 구조의 원소를 다양하게 가공하는 연산

  1. 자료구조 변경
  2. 원소 변경
  3. 원소 삭제
  4. 결측값 처리
  5. 함수를 이용한 원소 변경

 

1. 자료구조 변경

date = pd.date_range('2000-01-01', periods=5, freq='Y')

df = pd.DataFrame(
    {
        "A": pd.Series(np.random.randint(0, 10, size=5), index=date),
        "B": pd.Series(np.random.randint(0, 10, size=5), index=date),
        "C": pd.Series(np.random.randint(0, 10, size=5), index=date),
        "D": pd.Series(np.random.randint(0, 10, size=5), index=date),
    }
)

df

 

1-1. 행과 열 추가하기

df["E"] = pd.Series(np.random.randint(0,10, size=5), index=date)
df

 

df.loc['2005-12-31', :] = [0,0,0,0,0]
df

 

 

1-2. 임의 위치에 열 추가하기

pd.date_range('1/1/2000', periods=10, freq='Y') 
#'1/1/2000': 날짜 범위의 시작일을 나타냅니다. 이 경우에는 2000년 1월 1일입니다.
# periods=10: 생성할 날짜의 개수를 나타냅니다. 이 경우에는 10개의 날짜를 생성하게 됩니다.
# freq='Y': 날짜의 주기를 나타냅니다. 'Y'는 연간 주기를 의미합니다. 따라서 10개의 연간 날짜가 생성됩니다.(연말일로)
df.insert(2, 'AA', 
  pd.Series(
    np.random.randn(10), 
    index=pd.date_range('1/1/2000', periods=10, freq='Y')
  )
)
df

 

1-3. 행/열 삭제하기

df = df.drop('2005-12-31', axis=0)  #반환값을 다시 받아주어야함
df = df.drop('E', axis=1)
df

 

 

 

2. 원소 변경

date = pd.date_range('2000-01-01', periods=5, freq='Y')

df = pd.DataFrame(
    {
        "A": pd.Series(np.random.randint(0, 10, size=5), index=date),
        "B": pd.Series(np.random.randint(0, 10, size=5), index=date),
        "C": pd.Series(np.random.randint(0, 10, size=5), index=date),
        "D": pd.Series(np.random.randint(0, 10, size=5), index=date),
    }
)

df

 

 

2-1. 열 단위 변경

df["A"] = [1,1,1,1,1]
df

 

 

df.iloc[:, 1] = [2,2,2,2,2]
df

 

 

2-2. 행 단위 변경

# 행단위
df.loc['2000-12-31', :] = [2,2,2,2]
df

df.iloc[2, :] = [3,3,3,3]
df

 

 

2-3. 영역 단위 변경

date = pd.date_range('2000-01-01', periods=5, freq='Y')

df = pd.DataFrame(
    {
        "A": pd.Series(np.random.randint(0, 10, size=5), index=date),
        "B": pd.Series(np.random.randint(0, 10, size=5), index=date),
        "C": pd.Series(np.random.randint(0, 10, size=5), index=date),
        "D": pd.Series(np.random.randint(0, 10, size=5), index=date),
        "E": pd.Series(np.random.randint(0, 10, size=5), index=date),
    }
)

df

 

 

df.loc[['2001-12-31', '2002-12-31'], ['B', 'C']] = [7,7]
df

 

df.iloc[0:3, 2:4] = [6,6]
df

 

 

2-4. 개별 원소 변경

df.at['2004-12-31', 'E'] = 15
df

 

df.iat[4, 3] = 14
df

 

 

3. 원소 삭제

df = df.drop('A', axis=1)
df = df.drop('2003-12-31', axis=0)
df

 

 

 

4. 결측값 처리

df = pd.DataFrame(
    {
        "A": pd.Series(np.random.randint(0, 10, size=5), index=['a', 'b', 'c', 'd', 'e']),
        "B": pd.Series(np.random.randint(0, 10, size=4), index=['b', 'c', 'd', 'e']),
        "C": pd.Series(np.random.randint(0, 10, size=3), index=['c', 'd', 'e']),
    }
)

df

 

df = df.dropna() # 결측값 행 제거
df = df.dropna(axis = 1) # 결측값 열 제거
df.fillna(10) # 결측값 채우기

 

 

5. 함수를 이용한 원소변경

date = pd.date_range('2000-01-01', periods=5, freq='Y')

df = pd.DataFrame(
    {
        "A": pd.Series(np.random.randint(0, 2, size=5), index=['a', 'b', 'c', 'd', 'e']),
        "B": pd.Series(np.random.randint(0, 2, size=5), index=['a', 'b', 'c', 'd', 'e']),
        "C": pd.Series(np.random.randint(0, 2, size=5), index=['a', 'b', 'c', 'd', 'e']),
        "D": pd.Series(np.random.randint(0, 2, size=5), index=['a', 'b', 'c', 'd', 'e']),
        "E": pd.Series(np.random.randint(0, 2, size=4), index=['b', 'c', 'd', 'e']),
    }
)

df

 

 

5-1. 값 교체하기

df = df.replace(np.nan, 2)
df

 

5-2. 행/열 단위 함수 적용

def func(x):
  if(x == 0):
    return -1
  else:
    return x


df = df.iloc[:, 2].apply(func)
df

 

반응형

BELATED ARTICLES

more