Python
pandas/dropna
며칠 전 과제하면서 df에 데이터프레임을 받고 dropna로 NaN을 날려야 할 일이 생겼다.
colab에서 즉각적으로 결과를 보고싶어서 df.dropna(inplace=True)를 사용해서 확인했지만,
인덱스를 확인하는 과정에서 무언가 잘못 됨을 느꼈다.
df.dropna(inplace=True)
# ... after some tasks ...
# success
for i in df['Term']:
print(i)
# index error
for i in range(df.shape[0]):
print(df.loc[i, 'Term'])
df의 Term이라는 칼럼의 특정 인덱스를 출력해야 하는 상황이었는데, df.loc을 이용하면 인덱스 에러가 발생한 것이다.
데이터 크기가 (511, 11)인데 어떻게 28번째 row에서 인덱싱 에러가..
인덱싱하지 않고 그냥 Term에 있는 모든 data를 출력하면 또 잘 나와서 정말 당황했다.
원인을 찾아보니 dropna에서 inplace=True로 설정하면 결측치가 있는 행이 사라지지만, 인덱스는 업데이트되지 않는다.
따라서 reset_index로 인덱스를 다시 부여해야 한다.
웬만하면 inplace=True 사용을 자제해야 하지만, 꼭 사용해야 한다면 reset_index도 함께 이용하자.
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.reset_index.html
pandas.DataFrame.reset_index — pandas 2.0.0 documentation
next pandas.DataFrame.rfloordiv
pandas.pydata.org
df.dropna(inplace=True)
df.reset_index(inplace=True)
for i in range(df.shape[0]):
print(df.loc[i, 'Term'])
이렇게 하면 다시 정상적으로 row별로 접근할 수 있다!
도움 주신 분께 감사의 인사를 :)