나는 대부분의 실수로 채워진 팬더 DataFrame을 가지고 있지만 그 안에 몇 가지 nan
값이 있습니다.
nan
s를 열의 평균 열로 바꾸려면 어떻게 해야합니까?
이 질문은이 질문과 매우 유사합니다. numpy 배열 : nan 값을 평균 열로 바꾸지 만 불행히도 팬더 DataFrame에는 해당 솔루션이 작동하지 않습니다.
나는 대부분의 실수로 채워진 팬더 DataFrame을 가지고 있지만 그 안에 몇 가지 nan
값이 있습니다.
nan
s를 열의 평균 열로 바꾸려면 어떻게 해야합니까?
이 질문은이 질문과 매우 유사합니다. numpy 배열 : nan 값을 평균 열로 바꾸지 만 불행히도 팬더 DataFrame에는 해당 솔루션이 작동하지 않습니다.
답변:
를 사용 DataFrame.fillna
하여를 nan
직접 채울 수 있습니다 .
In [27]: df
Out[27]:
A B C
0 -0.166919 0.979728 -0.632955
1 -0.297953 -0.912674 -1.365463
2 -0.120211 -0.540679 -0.680481
3 NaN -2.027325 1.533582
4 NaN NaN 0.461821
5 -0.788073 NaN NaN
6 -0.916080 -0.612343 NaN
7 -0.887858 1.033826 NaN
8 1.948430 1.025011 -2.982224
9 0.019698 -0.795876 -0.046431
In [28]: df.mean()
Out[28]:
A -0.151121
B -0.231291
C -0.530307
dtype: float64
In [29]: df.fillna(df.mean())
Out[29]:
A B C
0 -0.166919 0.979728 -0.632955
1 -0.297953 -0.912674 -1.365463
2 -0.120211 -0.540679 -0.680481
3 -0.151121 -2.027325 1.533582
4 -0.151121 -0.231291 0.461821
5 -0.788073 -0.231291 -0.530307
6 -0.916080 -0.612343 -0.530307
7 -0.887858 1.033826 -0.530307
8 1.948430 1.025011 -2.982224
9 0.019698 -0.795876 -0.046431
의 docstring은 스칼라 또는 dict이어야 fillna
한다고 말하지만 value
, 함께 작동하는 것 같습니다 Series
. dict을 전달하려면을 사용할 수 있습니다 df.mean().to_dict()
.
df=df.fillna(df.mean())
당신도 사용할 수 있습니다df.fillna(df.mean(), inplace=True)
In [16]: df = DataFrame(np.random.randn(10,3))
In [17]: df.iloc[3:5,0] = np.nan
In [18]: df.iloc[4:6,1] = np.nan
In [19]: df.iloc[5:8,2] = np.nan
In [20]: df
Out[20]:
0 1 2
0 1.148272 0.227366 -2.368136
1 -0.820823 1.071471 -0.784713
2 0.157913 0.602857 0.665034
3 NaN -0.985188 -0.324136
4 NaN NaN 0.238512
5 0.769657 NaN NaN
6 0.141951 0.326064 NaN
7 -1.694475 -0.523440 NaN
8 0.352556 -0.551487 -1.639298
9 -2.067324 -0.492617 -1.675794
In [22]: df.mean()
Out[22]:
0 -0.251534
1 -0.040622
2 -0.841219
dtype: float64
해당 열의 평균을 열별로 적용하고 채 웁니다.
In [23]: df.apply(lambda x: x.fillna(x.mean()),axis=0)
Out[23]:
0 1 2
0 1.148272 0.227366 -2.368136
1 -0.820823 1.071471 -0.784713
2 0.157913 0.602857 0.665034
3 -0.251534 -0.985188 -0.324136
4 -0.251534 -0.040622 0.238512
5 0.769657 -0.040622 -0.841219
6 0.141951 0.326064 -0.841219
7 -1.694475 -0.523440 -0.841219
8 0.352556 -0.551487 -1.639298
9 -2.067324 -0.492617 -1.675794
# To read data from csv file
Dataset = pd.read_csv('Data.csv')
X = Dataset.iloc[:, :-1].values
# To calculate mean use imputer class
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer = imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])
누락 된 값을 평균으로 대치하고 열별로 이동하려는 경우 해당 열의 평균 만 대치합니다. 좀 더 읽기 쉽습니다.
sub2['income'] = sub2['income'].fillna((sub2['income'].mean()))
df.fillna(df.mean())
모든 null 값을 평균으로 채우는 데 직접 사용
해당 열의 평균으로 null 값을 채우려면 이것을 사용할 수 있습니다
x=df['Item_Weight']
여기 Item_Weight
에 열 이름이 있다고 가정 하십시오.
여기서 우리는 할당하고 있습니다 (x의 x로 null 값을 x에 채 웁니다)
df['Item_Weight'] = df['Item_Weight'].fillna((df['Item_Weight'].mean()))
일부 문자열로 null 값을 채우려면
여기는 Outlet_size
열 이름입니다
df.Outlet_Size = df.Outlet_Size.fillna('Missing')
팬더 : NaN ( nan
) 값을 평균 (평균), 중앙값 또는 한 열의 다른 통계 로 바꾸는 방법
DataFrame이 df
있고라는 열이 하나 있다고 가정하십시오 nr_items
. 이것은: df['nr_items']
당신이 할 경우 대체NaN
당신의 열의 값 df['nr_items']
와 컬럼의 평균을 :
사용 방법 .fillna()
:
mean_value=df['nr_items'].mean()
df['nr_item_ave']=df['nr_items'].fillna(mean_value)
값을 열 값으로 대체 하여 새 열을 저장하기 위해 df
호출 된 새 열 을 만들었습니다 .nr_item_ave
NaN
mean
를 사용할 때는주의해야합니다 mean
. 당신이있는 경우 이상치 를 사용하는 것이 더 추천 할median
sklearn 라이브러리 전처리 클래스 사용
from sklearn.impute import SimpleImputer
missingvalues = SimpleImputer(missing_values = np.nan, strategy = 'mean', axis = 0)
missingvalues = missingvalues.fit(x[:,1:3])
x[:,1:3] = missingvalues.transform(x[:,1:3])
참고 : 최신 버전의 매개 변수 missing_values
값 np.nan
에서NaN
df.fillna(df.mean())
새 데이터 프레임을 반환하므로df=df.fillna(df.mean())
이를 유지하기 위해 작성 해야합니다.