반응형

“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





반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts