2016-05-29 27 views
6

私はいくつかの列を持つpython pandasデータフレームを持っていて、1つの列は0の値を持っています。 0の値をこの列のmedianまたはmeanに置き換えます。Python/Pandas Dataframeは0を中央値に置き換えます

dataは私のデータフレーム
artist_hotnessが列

mean_artist_hotness = data['artist_hotness'].dropna().mean() 

if len(data.artist_hotness[ data.artist_hotness.isnull() ]) > 0: 
data.artist_hotness.loc[ (data.artist_hotness.isnull()), 'artist_hotness'] = mean_artist_hotness 

である私はこれを試してみましたが、それは動作しません。

答えて

4

maskを使用し、dropnaの代わりにskipna=Truemeanに追加するといいと思います。

import pandas as pd 
import numpy as np 

data = pd.DataFrame({'artist_hotness': [0,1,5,np.nan]}) 
print (data) 
    artist_hotness 
0    0.0 
1    1.0 
2    5.0 
3    NaN 

mean_artist_hotness = data['artist_hotness'].mean(skipna=True) 
print (mean_artist_hotness) 
2.0 

data['artist_hotness']=data.artist_hotness.mask(data.artist_hotness == 0,mean_artist_hotness) 
print (data) 
    artist_hotness 
0    2.0 
1    1.0 
2    5.0 
3    NaN 

またlocを使用しますが、列名を省略:別の解決策を

data.loc[data.artist_hotness == 0, 'artist_hotness'] = mean_artist_hotness 
print (data) 
    artist_hotness 
0    2.0 
1    1.0 
2    5.0 
3    NaN 

data.artist_hotness.loc[data.artist_hotness == 0, 'artist_hotness'] = mean_artist_hotness 
print (data) 

IndexingError: (0 True 1 False 2 False 3 False Name: artist_hotness, dtype: bool, 'artist_hotness')

をもNaN値を置き換える必要がある場合0値またはdata.artist_hotness.isnull()を交換する必要がある場合data.artist_hotness == 0に条件を変更する必要がありますDataFrame.replaceと指定列:

data=data.replace({'artist_hotness': {0: mean_artist_hotness}}) 
print (data) 
    aa artist_hotness 
0 0.0    2.0 
1 1.0    1.0 
2 5.0    5.0 
3 NaN    NaN 

た場合、またはすべての列のすべての0値置き換える必要があります。すべての列にNaNを交換する必要がある場合は

import pandas as pd 
import numpy as np 

data = pd.DataFrame({'artist_hotness': [0,1,5,np.nan], 'aa': [0,1,5,np.nan]}) 
print (data) 
    aa artist_hotness 
0 0.0    0.0 
1 1.0    1.0 
2 5.0    5.0 
3 NaN    NaN 

mean_artist_hotness = data['artist_hotness'].mean(skipna=True) 
print (mean_artist_hotness) 
2.0 

data=data.replace(0,mean_artist_hotness) 
print (data) 
    aa artist_hotness 
0 2.0    2.0 
1 1.0    1.0 
2 5.0    5.0 
3 NaN    NaN 

DataFrame.fillnaを使用します。

data=data.fillna(mean_artist_hotness) 
print (data) 
    aa artist_hotness 
0 0.0    0.0 
1 1.0    1.0 
2 5.0    5.0 
3 2.0    2.0 

しかし、一部のカラムだけでSeries.fillnaを使用する場合:

data['artist_hotness'] = data.artist_hotness.fillna(mean_artist_hotness) 
print (data) 
    aa artist_hotness 
0 0.0    0.0 
1 1.0    1.0 
2 5.0    5.0 
3 NaN    2.0 
4

使用pandasreplace方法:

df = pd.DataFrame({'a': [1,2,3,4,0,0,0,0], 'b': [2,3,4,6,0,5,3,8]}) 

df 
    a b 
0 1 2 
1 2 3 
2 3 4 
3 4 6 
4 0 0 
5 0 5 
6 0 3 
7 0 8 

df['a']=df['a'].replace(0,df['a'].mean()) 

df 
    a b 
0 1 2 
1 2 3 
2 3 4 
3 4 6 
4 1 0 
5 1 5 
6 1 3 
7 1 8 
1
data['artist_hotness'] = data['artist_hotness'].map(lambda x : data.artist_hotness.mean() if x == 0 else x) 
関連する問題