[Pandas] 데이터 분석을 위한 판다스 사용법 - 4. 데이터 가공 : 자료구조와 원소 변경하기
2023. 7. 5. 23:44
반응형
Pandas
파이썬에서 데이터 분석에 많이 이용함, 3가지 형태의 자료 구조와 연산 지원
연산
- 데이터 선택
- 데이터 가공
- 데이터 분석
- 데이터 편집
데이터 가공
자료 구조의 원소를 다양하게 가공하는 연산
- 자료구조 변경
- 원소 변경
- 원소 삭제
- 결측값 처리
- 함수를 이용한 원소 변경
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
반응형
'Data Science > 데이터분석 (Spark)' 카테고리의 다른 글
[Pandas] 데이터 분석을 위한 판다스 사용법 - 6. 데이터 편집 (0) | 2023.07.06 |
---|---|
[Pandas] 데이터 분석을 위한 판다스 사용법 - 5. 데이터 분석 (0) | 2023.07.06 |
[Pandas] 데이터 분석을 위한 판다스 사용법 - 3. 데이터 선택 : 조건과 필터 (0) | 2023.07.05 |
[Pandas] 데이터 분석을 위한 판다스 사용법 - 2. 데이터 선택 : 행과 열 선택하기 (0) | 2023.07.05 |
[Pandas] 데이터 분석을 위한 판다스 사용법 - 1. 자료구조 (0) | 2023.07.05 |