[Pandas] 특정 위치에 새로운 컬럼 삽입하기
특정 조건에 부합했을 때, 새로운 열을 생성하여 조건에 부합하는 데이터를 삽입하고 싶었다.
말로 설명하니 이해하기가 조금 어려운데, 예제를 들어 확인해보자.
df 생성
아래과 같은 데이터 프레임이 있을때, 숫자면 num, 문자면 chr인 행을 추가하고싶다.
df = pd.DataFrame({'data' : ['가', '123', '나', 'A', '5555']})
신규 컬럼 생성
df.iterrows 함수를 사용해 idx와 row를 가져온다.
✔ df.iterrows()
Dataframe의 각 행에 있는 정보를 담은 객체
tuple의 형태로 출력이되며, 첫번째 자리에는 index
두번째 자리에는DataFrame의 행 정보가 Series 형태로 들어있다.
for idx, row in df.iterrows():
print(idx, row)
0 data 가
Name: 0, dtype: object
1 data 123
Name: 1, dtype: object
2 data 나
Name: 2, dtype: object
3 data A
Name: 3, dtype: object
4 data 5555
Name: 4, dtype: object
data 행의 row를 가져와 숫자인지 아닌지 확인 후 컬럼을 생성한다.
✔ df.at()
지정한 인덱스, 컬럼의 값을 변경한다.
for idx, row in df.iterrows():
data = row['data']
df.at[idx, 'type'] = 'num' if data.isdigit() else 'chr'
Error
🤔 이때 파이참에서 실행 할 경우 아래와 같은 오류가 발생한다.
FutureWarning: Setting an item of incompatible dtype is deprecated and will raise in a future error of pandas. Value 'DAY' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.
타입 지정을 하지 않고, at으로 생성을 했을 시 이후 버전의 pandas에서는 에러가 난다고 한다.
다음과 같이 해결했다.
df.insert(df.shape[1],'type',' ')
✔ df.insert(ioc, 컬럼명, 값)
데이터 프레임에 컬럼을 삽입한다.
df.shape를 실행하면 [0]에는 행의 개수 [1]에는 열의 개수가 저장된다.
df.shape[1]이 마지막 열의 idx이기 때문에, 마지막 컬럼 뒤에 type 컬럼을 먼저 생성 후
df.at으로 데이터를 변경해주니 오류가 발생하지 않았다.
df의 dtype은 다음과 같이 확인이 가능하다.
df.dtypes
dtype의 변경은 df.astype 함수를 통해 가능하다.
df.astype({'변경 할 컬럼명':'타입'})
딕셔너리 형태가 아닌 괄호에 타입만 명시했을 시, 데이터 프레임의 전체 타입이 변경된다.
'👩💻 Develope > Python' 카테고리의 다른 글
[Pandas] 데이터프레임 리스트로 변환하기 (0) | 2023.10.04 |
---|---|
[Python] 리스트끼리 빼기 (0) | 2023.09.22 |
[Python] Sorted 다중 조건 걸기 (0) | 2023.09.07 |
[Python] Reduce (1) | 2023.09.06 |
[Python] isdigit, isalpha (0) | 2023.09.01 |