“10 minutes to pandas” 문서를 따라해보며 작성했습니다.
https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html
열 이름의 위치가 맞지 않으니 실행하여 결과에서 확인하세요.
2022. 02. 02 최초작성
결측치는 입력이 안되는 등의 이유로 데이터가 있어야 할 위치에 값이 없는 경우를 의미합니다.
Pandas에서는 결측치를 np.nan로 나타내며 기본적으로 연산에서 사용하지 않습니다.
자세한 내용은 아래 링크를 참고하세요.
https://pandas.pydata.org/pandas-docs/stable/user_guide/missing_data.html#missing-data
import numpy as np import pandas as pd dates = pd.date_range("20220101", periods=6) df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list("ABCD")) print(df) # A B C D # 2022-01-01 1.952599 0.733410 0.482138 0.159839 # 2022-01-02 0.721098 1.306087 2.286762 0.230026 # 2022-01-03 -1.574715 0.899241 -1.443177 -0.755675 # 2022-01-04 0.659616 0.123255 -0.487311 0.979096 # 2022-01-05 -0.000170 -0.301854 0.409785 -0.258526 # 2022-01-06 -1.796259 -0.124083 -0.099044 -1.455900 # 행은 0~3행만 남겨두고, 열은 라벨 E가 붙은 열을 추가합니다. # 라벨 E 행에는 데이터가 없기 때문에 모든 값이 결측값(NaN)으로 출력됩니다. df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ["E"]) print(df1) # A B C D E # 2022-01-01 1.952599 0.733410 0.482138 0.159839 NaN # 2022-01-02 0.721098 1.306087 2.286762 0.230026 NaN # 2022-01-03 -1.574715 0.899241 -1.443177 -0.755675 NaN # 2022-01-04 0.659616 0.123255 -0.487311 0.979096 NaN # 0~1행, 라벨 E 열의 값을 1로 변경합니다. df1.loc[dates[0] : dates[1], "E"] = 1 print(df1) # A B C D E # 2022-01-01 1.952599 0.733410 0.482138 0.159839 1.0 # 2022-01-02 0.721098 1.306087 2.286762 0.230026 1.0 # 2022-01-03 -1.574715 0.899241 -1.443177 -0.755675 NaN # 2022-01-04 0.659616 0.123255 -0.487311 0.979096 NaN |
결측치가 있는 행을 제거하도록 합니다.
import numpy as np import pandas as pd dates = pd.date_range("20220101", periods=6) df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list("ABCD")) print(df) # A B C D # 2022-01-01 0.482175 -1.308112 -1.603287 1.007241 # 2022-01-02 -2.012714 1.057843 -2.152175 0.046772 # 2022-01-03 -0.613550 -1.116251 -0.322529 0.146770 # 2022-01-04 1.128491 -0.301581 -0.644300 0.300164 # 2022-01-05 0.502597 -0.647608 0.782583 1.029082 # 2022-01-06 -0.510316 -0.001505 -2.076136 -0.890352 # 행은 0~3행만 남겨두고, 열은 라벨 E가 붙은 열을 추가합니다. # 라벨 E 행에는 데이터가 없기 때문에 모든 값이 결측값(NaN)으로 출력됩니다. df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ["E"]) print(df1) # A B C D E # 2022-01-01 0.482175 -1.308112 -1.603287 1.007241 NaN # 2022-01-02 -2.012714 1.057843 -2.152175 0.046772 NaN # 2022-01-03 -0.613550 -1.116251 -0.322529 0.146770 NaN # 2022-01-04 1.128491 -0.301581 -0.644300 0.300164 NaN # 0~1행, 라벨 E 열의 값을 1로 변경합니다. df1.loc[dates[0] : dates[1], "E"] = 1 print(df1) # A B C D E # 2022-01-01 0.482175 -1.308112 -1.603287 1.007241 1.0 # 2022-01-02 -2.012714 1.057843 -2.152175 0.046772 1.0 # 2022-01-03 -0.613550 -1.116251 -0.322529 0.146770 NaN # 2022-01-04 1.128491 -0.301581 -0.644300 0.300164 NaN # 결측값(NaN)이 포함된 행을 제거합니다. df1 = df1.dropna(how="any") print(df1) # A B C D E # 2022-01-01 0.482175 -1.308112 -1.603287 1.007241 1.0 # 2022-01-02 -2.012714 1.057843 -2.152175 0.046772 1.0 |
결측값을 지정한 값으로 변경합니다.
import numpy as np import pandas as pd dates = pd.date_range("20220101", periods=6) df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list("ABCD")) print(df) # A B C D # 2022-01-01 0.934671 -1.210267 0.907101 1.508588 # 2022-01-02 -0.841501 0.221642 0.642721 0.762120 # 2022-01-03 0.276999 1.294667 -0.119935 0.925058 # 2022-01-04 -0.727833 1.707322 -1.662873 2.022060 # 2022-01-05 0.318820 -1.123569 -0.077842 -1.022551 # 2022-01-06 0.245495 0.067330 0.069007 -1.170828 # 행은 0~3행만 남겨두고, 열은 라벨 E가 붙은 열을 추가합니다. # 라벨 E 행에는 데이터가 없기 때문에 모든 값이 결측값(NaN)으로 출력됩니다. df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ["E"]) print(df1) # A B C D E # 2022-01-01 0.934671 -1.210267 0.907101 1.508588 NaN # 2022-01-02 -0.841501 0.221642 0.642721 0.762120 NaN # 2022-01-03 0.276999 1.294667 -0.119935 0.925058 NaN # 2022-01-04 -0.727833 1.707322 -1.662873 2.022060 NaN # 결측값을 5로 변경합니다. df1 = df1.fillna(value=5) print(df1) # A B C D E # 2022-01-01 0.934671 -1.210267 0.907101 1.508588 5.0 # 2022-01-02 -0.841501 0.221642 0.642721 0.762120 5.0 # 2022-01-03 0.276999 1.294667 -0.119935 0.925058 5.0 # 2022-01-04 -0.727833 1.707322 -1.662873 2.022060 5.0 |
결측값이 있는지 유무를 부울 타입 값으로 표시합니다.
import numpy as np import pandas as pd dates = pd.date_range("20220101", periods=6) df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list("ABCD")) print(df) # A B C D # 2022-01-01 1.242148 1.050455 1.618820 1.763128 # 2022-01-02 -0.453813 0.111374 1.220791 -0.758684 # 2022-01-03 0.240570 0.842742 0.246638 0.569898 # 2022-01-04 0.039524 0.197326 0.175994 1.302303 # 2022-01-05 0.219269 -1.679990 -1.142062 -0.018121 # 2022-01-06 -0.568852 -0.709319 1.129242 0.535441 # 행은 0~3행만 남겨두고, 열은 라벨 E가 붙은 열을 추가합니다. # 라벨 E 행에는 데이터가 없기 때문에 모든 값이 결측값(NaN)으로 출력됩니다. df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ["E"]) print(df1) # A B C D E # 2022-01-01 1.242148 1.050455 1.618820 1.763128 NaN # 2022-01-02 -0.453813 0.111374 1.220791 -0.758684 NaN # 2022-01-03 0.240570 0.842742 0.246638 0.569898 NaN # 2022-01-04 0.039524 0.197326 0.175994 1.302303 NaN df1 = pd.isna(df1) print(df1) # A B C D E # 2022-01-01 False False False False True # 2022-01-02 False False False False True # 2022-01-03 False False False False True # 2022-01-04 False False False False True |
Pandas 강좌 1 - Pandas 객체 생성
https://webnautes.tistory.com/1957
Pandas 강좌 2 - 데이터 보는 방법
https://webnautes.tistory.com/1958
Pandas 강좌 3 - 데이터 선택하는 방법
https://webnautes.tistory.com/1959
Pandas 강좌 4 - 연산(Operations)
https://webnautes.tistory.com/1960
Pandas 강좌 5 - 연결 및 그룹핑
https://webnautes.tistory.com/1961
Pandas 강좌 6 - 시계열(Time series)
https://webnautes.tistory.com/1962
Pandas 강좌 7 - 그래프 그리기(Plotting)
https://webnautes.tistory.com/1963
Pandas 강좌 8 - Pandas에서 CSV, HDF5, Excel로 저장 및 읽기
https://webnautes.tistory.com/1964
Pandas 강좌 9 - 결측치(Missing data)
https://webnautes.tistory.com/1965
'Python > Pandas' 카테고리의 다른 글
컬럼에서 특정 값을 가진 행 삭제하는 Pandas 예제 (0) | 2024.03.22 |
---|---|
값 범위에 따라 컬럼 값 변경하는 pandas 예제 (0) | 2024.03.21 |
Pandas 강좌 8 - Pandas에서 CSV, HDF5, Excel로 저장 및 읽기 (0) | 2023.10.12 |
Pandas 강좌 7 - 그래프 그리기(Plotting) (0) | 2023.10.12 |
Pandas 강좌 6 - 시계열(Time series) (0) | 2023.10.12 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!