2016-11-29 7 views
2

私はデータフレームの各列を反復し、matplotlibの:カント作成ログプロット

cols = in_df.columns 

for col in cols: 
    in_df[col]=in_df[col].dropna() 
    print (in_df[col].values) 
    in_df[col].map(np.log).hist(bins=1000) 
    plt.xlabel(x_label+col) 
    plt.ylabel('Number of customers in train') 
    plt.savefig(save_dir+col+'.png') 
    plt.close() 

としてログプロットを作成しようとしているが、私は次のように動作することを

[2 2 2 ..., 2 2 2] 
in_df[col].map(np.log).hist(bins=1000) 
File "anaconda/envs/kaggle3/lib/python3.5/site-packages/pandas/tools/plotting.py", line 2988, in hist_series 
    ax.hist(values, bins=bins, **kwds) 
    File "anaconda/envs/kaggle3/lib/python3.5/site-packages/matplotlib/__init__.py", line 1819, in inner 
    return func(ax, *args, **kwargs) 
    File "anaconda/envs/kaggle3/lib/python3.5/site-packages/matplotlib/axes/_axes.py", line 5985, in hist 
    m, bins = np.histogram(x[i], bins, weights=w[i], **hist_kwargs) 
    File "anaconda/envs/kaggle3/lib/python3.5/site-packages/numpy/lib/function_base.py", line 505, in histogram 
    'range parameter must be finite.') 
ValueError: range parameter must be finite. 

ノートを取得しています

in_df.col_name.map(np.log).hist(bins=1000) 

どのように私はこのアプローチを使用することができますすべての列を反復しながら。なぜ私はエラーが発生している任意のアイデアですか?

+2

あなたはゼロのログを取っていますか? – piRSquared

+0

ええと、それについては考えていませんでした。そこにゼロがある可能性があります – AbtPst

答えて

1

私がゼロについて正しい場合は、問題を解決する最も簡単な方法はそれらを削除することです。それを行う方法はたくさんあります。以下は1つです:

cols = in_df.columns 

for col in cols: 
    in_df[col]=in_df[col].dropna() 
    print (in_df[col].values) 
    # I edited line below 
    in_df[col].replace(0, np.nan).dropna().map(np.log).hist(bins=1000) 
    # added |<------------------------>| 
    plt.xlabel(x_label+col) 
    plt.ylabel('Number of customers in train') 
    plt.savefig(save_dir+col+'.png') 
    plt.close() 
+0

ありがとう!それだった – AbtPst

関連する問題