[Python pandas] DataFrame - 2. 추가, 삭제, 수정

hwwwa·2022년 1월 5일
0

🐼 Python

목록 보기
5/18
post-custom-banner

DataFrame에 column, row, index 추가하기

index 설정

  • pandas는 기본적으로 row에 인덱스를 0부터 차례대로 부여
  • set_index 함수를 이용해 변경 가능
  • 아래의 코드는 A column을 인덱스로 지정하는 것
df = pd.DataFrame({"A":[1,4,7], "B":[2,5,8], "C":[3,6,9]})
print(df)
#    A  B  C
# 0  1  2  3
# 1  4  5  6
# 2  7  8  9

# 'A' column을 인덱스로 지정하기
df = df.set_index('A')
print(df)
#    B  C
# A      
# 1  2  3
# 4  5  6
# 7  8  9

column 설정 (이름 변경)

  • df.columns로 전체 열 이름을 설정 가능
  • df.rename으로 변경할 열 이름만 지정하려 변경 가능
# 전체 열 이름 입력하기
df.columns = ['name1', 'name2', 'name3']

# 선택하여 열 이름 변경하기
df.rename(columns={'Beforename':'Aftername'}, inplace=True)

row 추가

  • loc 사용
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
	index= [2.5, 12.6, 4.8],
	columns=[48, 49, 50])
print(df)
#       48  49  50
# 2.5    1   2   3
# 12.6   4   5   6
# 4.8    7   8   9

# 새로운 index=2인 row가 만들어짐
df.loc[2] = [11, 12, 13]
print(df)
#       48  49  50
# 2.5    1   2   3
# 12.6   4   5   6
# 4.8    7   8   9
# 2.0   11  12  13
  • append 이용
    • 인덱스를 신경쓰지 않고 데이터의 가장 뒤에 row 추가
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), 
	columns=[48, 49, 50])
print(df)
#    48  49  50
# 0   1   2   3
# 1   4   5   6
# 2   7   8   9

a = pd.DataFrame(data=[[1,2,3]], columns=[48,49,50])
print(a)
#    48  49  50
# 0   1   2   3

df = df.append(a)
df = df.reset_index(drop=True)
print(df)
#    48  49  50
# 0   1   2   3
# 1   4   5   6
# 2   7   8   9
# 3   1   2   3

column 추가

  • loc 이용
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
	columns=['A', 'B', 'C'])
print(df)
#    A  B  C
# 0  1  2  3
# 1  4  5  6
# 2  7  8  9

df.loc[:, 'D'] = pd.Series(['5', '6', '7'], index=df.index)
print(df)
#    A  B  C  D
# 0  1  2  3  5
# 1  4  5  6  6
# 2  7  8  9  7
  • DataFrame[’columnName’] 이용
df['E'] = pd.Series(['5', '6', '7'], index=df.index)
print(df)
#    A  B  C  D  E
# 0  1  2  3  5  5
# 1  4  5  6  6  6
# 2  7  8  9  7  7

DataFrame에서 column, row, index 삭제하기

index 삭제

  • 인덱스를 지우는 일이 많지 않아 보통 reset_index 함수를 이용해 index 리셋하는 것을 주로 사용
  • index의 이름을 삭제하고 싶다면 del DataFrame.index.name을 이용

column 삭제

  • drop 명령어를 통해 컬럼 전체 삭제 가능
    • axis=1은 컬럼을 뜻함
    • axis=0인 경우가 디폴트이며 이는 로우 삭제
    • inplace는 drop한 후의 DataFrame으로 기존 DataFrame을 대체하겠다는 의미. True가 디폴트
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['A', 'B', 'C'])
print(df)
#    A  B  C
# 0  1  2  3
# 1  4  5  6
# 2  7  8  9

# 'A' column 삭제            
df.drop('A', axis=1, inplace=True)
print(df)
#    B  C
# 0  2  3
# 1  5  6
# 2  8  9

row 삭제

  • 중복 row 삭제
    • drop_duplicate 사용하여 특정 컬럼(subset 키워드)의 값이 중복된 로우 제거
    • keep 키워드를 통해 중복된 것들 중 어떤 것을 유지할지 결정
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [40, 50, 60], [23, 35, 37]]),
	index= [2.5, 12.6, 4.8, 4.8, 2.5],
	columns=[48, 49, 50])
print(df)
#       48  49  50
# 2.5    1   2   3
# 12.6   4   5   6
# 4.8    7   8   9
# 4.8   40  50  60
# 2.5   23  35  37

df = df.reset_index()
print(df)
#    index  48  49  50
# 0    2.5   1   2   3
# 1   12.6   4   5   6
# 2    4.8   7   8   9
# 3    4.8  40  50  60
# 4    2.5  23  35  37

df = df.drop_duplicates(subset='index', keep='last').set_index('index')
print(df)
#        48  49  50
# index            
# 12.6    4   5   6
# 4.8    40  50  60
# 2.5    23  35  37
  • 인덱스를 통한 row 삭제
    • drop 명령어를 통해 특정 index를 가진 row 삭제 가능
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
	columns=['A', 'B', 'C'])
print(df)
#    A  B  C
# 0  1  2  3
# 1  4  5  6
# 2  7  8  9

print(df.drop(df.index[1]))
#    A  B  C
# 0  1  2  3
# 2  7  8  9

print(df.drop(0))
#    A  B  C
# 1  4  5  6
# 2  7  8  9

데이터 수정하기

df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
	columns=['A', 'B', 'C'])
print(df)
#    A  B  C
# 0  1  2  3
# 1  4  5  6
# 2  7  8  9

df.at[0, 'A'] = 0
print(df)
#    A  B  C
# 0  0  2  3
# 1  4  5  6
# 2  7  8  9

참고로 df.loc[0]['A'] = 0 으로 수행하면 가끔 아래와 같은 에러가 발생함
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
그러니 at을 사용해 수정하는 것을 추천

post-custom-banner

0개의 댓글