[python] pandas 행, 열 삭제하는 법



pandas 행, 열 삭제하는 법

import pandas as pd 

rows = ["c1", "c2", "c3", "c4", "c5"]
cols = ["A", "B", "C", "D", "E"]
data = {
       cols[0]: [100, 101, 102, 103, 104], 
       cols[2]: [300, 301, 302, 303, 304]
}

df = pd.DataFrame(data, index=rows, columns=cols)
df = df.fillna(0)

print(df)

# 출력
#          A    B     C   D  E
# c1  100  0  300  0  0
# c2  101  0  301  0  0
# c3  102  0  302  0  0
# c4  103  0  303  0  0
# c5  104  0  304  0  0

row, column에 사용할 명칭을 설정하고 data 값을 넣어 DataFrame을 생성했습니다.

1. column(열) 삭제

1-1. del을 이용한 column 삭제 [1]

del은 index 값을 기반으로 값을 삭제하며 특정 index 또는 slice를 통해 값을 삭제할 수 있습니다.
del df["A"]
print(df)

# 출력
#      B       C  D  E
# c1  0  300  0  0
# c2  0  301  0  0
# c3  0  302  0  0
# c4  0  303  0  0
# c5  0  304  0  0
pandas 객체를 slice하여 여러행을 삭제하기 위해서는 아래와 같은 방식으로 사용해야합니다.
for col in df.columns:
    if col == "A" or col == "C":
        del df[col]
print(df)

# 출력
#      B  D  E
# c1  0  0  0
# c2  0  0  0
# c3  0  0  0
# c4  0  0  0
# c5  0  0  0



1-2. drop을 이용한 column 삭제 [2]


drop은 row or column label을 입력하면 그 값들을 지워줍니다.
row, column을 지울 때 2가지 방법이 존재합니다.

1-2-1. axis 명시 [2, 3]

axis = 0은 각 column에 값을 가져옵니다.
axis = 1은 각 row값을 가져옵니다.
즉. axis=0은 row을, axis=1은 column을 의미합니다.


1-2-2. columns 명시 [2]


drop("A", axis=1) == drop(columns="A")와 동일합니다.

axis=1은 column이니 drop("A", axis=1)은 "A" column 값을 제거하겠다는 의미입니다.

axis, column 둘 중 더 편한 방법으로 사용하시면 됩니다.

df = df.drop("A", axis=1)
# df = df.drop(columns="A")
print(df)

# 출력
#      B       C  D  E
# c1  0  300  0  0
# c2  0  301  0  0
# c3  0  302  0  0
# c4  0  303  0  0
# c5  0  304  0  0

여러 column을 삭제하기 위해서는 아래와 같은 방식으로 사용하면 됩니다.

df = df.drop(["A""C"], axis=1)
# df = df.drop(columns=["A", "C"])
print(df)

# 출력
#      B  D  E
# c1  0  0  0
# c2  0  0  0
# c3  0  0  0
# c4  0  0  0
# c5  0  0  0

column 삭제 방법으로 del과 drop을 알아봤는데
del은 "remove an item from a list"라며 list를 기준으로 remove가 일어납니다.
drop은 pandas.DataFrame.drop method로서 pandas에 특화되어 있기 때문에 drop을 사용하는걸 추천드립니다.



2. row(행) 삭제 [3]


drop("c1", axis=0) == drop(index="c1")과 동일합니다.

df = df.drop("c1"# df = df.drop("c1", axis=0)
# df = df.drop(index="c1")
print(df)

# 출력
#          A  B       C  D  E
# c2  101  0  301  0  0
# c3  102  0  302  0  0
# c4  103  0  303  0  0
# c5  104  0  304  0  0

drop에서 axis는 default가 0이기 때문에 굳이 명시하지 않아도 상관없습니다.

df = df.drop(["c1", "c3"]) # df = df.drop(["c1", "c3"], axis=0)
# df = df.drop(index=["c1", "c3"])
print(df)

# 출력
#          A  B       C  D  E
# c2  101  0  301  0  0
# c4  103  0  303  0  0
# c5  104  0  304  0  0



참고문헌




댓글

  1. axis = 0은 각 column에 값을 가져옵니다.
    axis = 1은 각 row값을 가져옵니다.

    여기에서 axis = 0은 가로 즉 row를 의미하고,
    axis = 1은 세로 즉 colnmn을 의미하는 것 아닌지요?

    row와 column이 다르게 표시된듯하여 확인코자 태클걸어 봅니다.

    답글삭제
    답글
    1. 표상에 그림이 헷갈리게 되어 댓글달았으나, 설명은 또 잘해 놓으셨네요. 미안합니다. 글을 삭제하려고 하는데 삭제가 안되서 수정 댓글 답니다.

      삭제
    2. 네, axis=0은 row, axis=1은 column을 의미합니다.

      제 의도는 axis=0은 "각 column에 해당하는 값을 가져오기 때문에 row이다"를 표현하고자 그림에서 각 column에 axis=0을 표기했습니다. (그림 상에서 빨간 테두리는 row를 뜻하는 의도로)

      충분히 이해에 어려움이 있어보이네요. 좀 더 직관적으로 표현할 수 있도록 노력하겠습니다.

      관심가져주셔서 감사합니다 ~~!

      삭제

댓글 쓰기

이 블로그의 인기 게시물

[opencv-python] 이미지 크기조절(resize) 하는 법

[python]파이썬: csv reader header skip (첫번째 행 무시하기, 안읽기)

[python] selenium close와 quit 차이점