2016-11-29 61 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

如果我说得对零点,解决您的问题最简单的方法是删除它们。有很多方法可以做到这一点。下面是一个:

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