본문 바로가기
Python/Python FAQ

Python 판다스 데이터프레임의 열에서 NaN 값을 0으로 대체하는 방법은 무엇인가요?, How to replace NaN values by Zeroes in a column of a Pandas Dataframe?

by 베타코드 2023. 9. 8.
반응형

질문


나는 아래와 같은 Pandas Dataframe을 가지고 있습니다:

      itm Date                  Amount 
67    420 2012-09-30 00:00:00   65211
68    421 2012-09-09 00:00:00   29424
69    421 2012-09-16 00:00:00   29877
70    421 2012-09-23 00:00:00   30990
71    421 2012-09-30 00:00:00   61303
72    485 2012-09-09 00:00:00   71781
73    485 2012-09-16 00:00:00     NaN
74    485 2012-09-23 00:00:00   11072
75    485 2012-09-30 00:00:00  113702
76    489 2012-09-09 00:00:00   64731
77    489 2012-09-16 00:00:00     NaN

Amount 열에 함수를 적용하려고 할 때 다음과 같은 오류가 발생합니다:

ValueError: float NaN을 정수로 변환할 수 없습니다

Math 모듈의 .isnan을 사용하여 함수를 적용해 보았습니다. Pandas의 .replace 속성을 시도해 보았습니다. Pandas 0.9의 .sparse 데이터 속성을 시도해 보았습니다. 또한 NaN == NaN 문을 함수에서 사용해 보았습니다. 또한 이 문서 How do I replace NA values with zeros in an R dataframe?와 같은 다른 문서도 참고하였습니다. 시도한 모든 방법들은 작동하지 않거나 NaN을 인식하지 못합니다. 어떤 힌트나 해결책이라도 환영합니다.


답변


나는 DataFrame.fillna()가 이 작업을 수행할 것이라고 믿습니다.

데이터프레임시리즈에 대한 문서 링크입니다.

예시:

In [7]: df
Out[7]: 
          0         1
0       NaN       NaN
1 -0.494375  0.570994
2       NaN       NaN
3  1.876360 -0.229738
4       NaN       NaN

In [8]: df.fillna(0)
Out[8]: 
          0         1
0  0.000000  0.000000
1 -0.494375  0.570994
2  0.000000  0.000000
3  1.876360 -0.229738
4  0.000000  0.000000

NaN을 한 열에만 채우려면 해당 열만 선택하세요. 이 경우에는 inplace=True를 사용하여 실제로 df의 내용을 변경합니다.

In [12]: df[1].fillna(0, inplace=True)
Out[12]: 
0    0.000000
1    0.570994
2    0.000000
3   -0.229738
4    0.000000
Name: 1

In [13]: df
Out[13]: 
          0         1
0       NaN  0.000000
1 -0.494375  0.570994
2       NaN  0.000000
3  1.876360 -0.229738
4       NaN  0.000000

편집:

SettingWithCopyWarning을 피하려면 내장된 열별 기능을 사용하세요.

df.fillna({1:0}, inplace=True)
반응형

댓글