[PYTHON] Pandas Dataframe : NaN을 행 평균으로 바꾸기
PYTHONPandas Dataframe : NaN을 행 평균으로 바꾸기
나는 판다를 배우려고 노력하고있다. 그러나 나는 다음과 같이 어리 석다. NaN을 행 평균과 데이터 프레임으로 대체하고 싶습니다. 따라서 df.fillna (df.mean (axis = 1))와 같은 것이 작동해야하지만, 어떤 이유로 그것이 나를 위해 실패합니다. 제발 아무것도 놓치고 있어요, 내가 잘못하고있는 게 뭔가요? 그것은 구현되지 않았기 때문입니다. 여기 링크를 참조하십시오.
import pandas as pd
import numpy as np
pd.__version__
Out[44]:
'0.15.2'
In [45]:
df = pd.DataFrame()
df['c1'] = [1, 2, 3]
df['c2'] = [4, 5, 6]
df['c3'] = [7, np.nan, 9]
df
Out[45]:
c1 c2 c3
0 1 4 7
1 2 5 NaN
2 3 6 9
In [46]:
df.fillna(df.mean(axis=1))
Out[46]:
c1 c2 c3
0 1 4 7
1 2 5 NaN
2 3 6 9
그러나 이것과 같은 것은 잘 작동하는 것처럼 보입니다.
df.fillna(df.mean(axis=0))
Out[47]:
c1 c2 c3
0 1 4 7
1 2 5 8
2 3 6 9
해결법
-
==============================
1.주석으로 fillna에 대한 축 인수는 NotImplemented입니다.
주석으로 fillna에 대한 축 인수는 NotImplemented입니다.
df.fillna(df.mean(axis=1), axis=1)
참고 : n 번째 행 평균으로 n 번째 열을 채우고 싶지 않으므로 여기에서 중요합니다.
지금은 다음을 반복해야합니다.
In [11]: m = df.mean(axis=1) for i, col in enumerate(df): # using i allows for duplicate columns # inplace *may* not always work here, so IMO the next line is preferred # df.iloc[:, i].fillna(m, inplace=True) df.iloc[:, i] = df.iloc[:, i].fillna(m) In [12]: df Out[12]: c1 c2 c3 0 1 4 7.0 1 2 5 3.5 2 3 6 9.0
대체 방법은 트랜스 포즈를 한 다음 트랜스 포 더를하는 것이 더 효율적일 수 있습니다 ...
df.T.fillna(df.mean(axis=1)).T
-
==============================
2.대안으로, 다음과 같은 람다 식으로 적용을 사용할 수도 있습니다 :
대안으로, 다음과 같은 람다 식으로 적용을 사용할 수도 있습니다 :
df.apply(lambda row: row.fillna(row.mean()), axis=1)
항복
c1 c2 c3 0 1.0 4.0 7.0 1 2.0 5.0 3.5 2 3.0 6.0 9.0
from https://stackoverflow.com/questions/33058590/pandas-dataframe-replacing-nan-with-row-average by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 엑셀 파일에 사전 값 쓰기 (0) | 2018.11.26 |
---|---|
[PYTHON] sqlalchemy를 사용하여 csv 파일을 데이터베이스에로드 (0) | 2018.11.26 |
[PYTHON] 장고 프록시 모델과 ForeignKey (0) | 2018.11.26 |
[PYTHON] 파이썬 틸드 단항 연산자 부정으로 numpy bool 배열 (0) | 2018.11.26 |
[PYTHON] FTPES - 세션 재사용 필요 (0) | 2018.11.26 |