我的pandas
dataframe
有列:
'视频'并且'链接'点击值
带有datetime索引。出于某种原因,当我使用semilogy和boxplot与视频系列时,我得到错误
ValueError: Data has no positive values, and therefore can not be log-scaled.
但是当我在'链接'我可以正确地绘制箱线图。
我已经验证两者'视频'并且'链接'系列具有NaN值和正值。
有关为何发生这种情况的任何想法?以下是我为确认是这种情况所做的工作
以下是示例代码:
#get all the not null values of video to show that there are positive
temp=a.types_pivot[a.types_pivot['video'].notnull()]
print temp
#get a count of all the NaN values to show both 'video' and 'link' has NaN
count = 0
for item in a.types_pivot['video']:
if(item.is_integer() == False):
count += 1
#try to draw the plots
print "there is %s nan values in video" % (count)
fig=plt.figure(figsize=(6,6),dpi=50)
ax=fig.add_subplot(111)
ax.semilogy()
plt.boxplot(a.types_pivot['video'].values)
以下是视频系列代码的相关输出
type link video created_time我运行相同的确切代码,除了我
2011-02-10 15:00:51+00:00 NaN 5 2011-02-17 17:50:38+00:00 NaN 5 2011-03-22 14:04:56+00:00 NaN 5there is 5463 nan values in video
a.types_pivot['link']
我可以绘制箱线图。
以下是链接系列的相关输出
Index: 5269 entries, 2011-01-24 20:03:58+00:00 to 2012-06-22 16:56:30+00:00 Data columns: link 5269 non-null values photo 0 non-null values question 0 non-null values status 0 non-null values swf 0 non-null values video 0 non-null values dtypes: float64(6)there is 216 nan values in link
Using the describe function
a.types_pivot['video'].describe()
<pre>
count 22.000000
mean 16.227273
std 15.275040
min 1.000000
25% 5.250000
50% 9.500000
75% 23.000000
max 58.000000
</pre>
答案 0 :(得分:1)
注意:由于imgur的某些问题,我无法上传图片。我稍后再试。
通过调用pd.DataFrame.boxplot()来利用pandas matplotlib helper / wrappers。我相信这会照顾你的NaN值。它还将两个系列放在同一个图中,以便您轻松比较数据。
示例强> 创建具有一些NaN值和负值的数据框
In [7]: df = pd.DataFrame(np.random.rand(10, 5))
In [8]: df.ix[2:4,3] = np.nan
In [9]: df.ix[2:3,4] = -0.45
In [10]: df
Out[10]:
0 1 2 3 4
0 0.391882 0.776331 0.875009 0.350585 0.154517
1 0.772635 0.657556 0.745614 0.725191 0.483967
2 0.057269 0.417439 0.861274 NaN -0.450000
3 0.997749 0.736229 0.084077 NaN -0.450000
4 0.886303 0.596473 0.943397 NaN 0.816650
5 0.018724 0.459743 0.472822 0.598056 0.273341
6 0.894243 0.097513 0.691781 0.802758 0.785258
7 0.222901 0.292646 0.558909 0.220400 0.622068
8 0.458428 0.039280 0.670378 0.457238 0.912308
9 0.516554 0.445004 0.356060 0.861035 0.433503
请注意,我可以像这样计算NaN值的数量:
In [14]: df[3].isnull().sum() # Count NaNs in the 4th column
Out[14]: 3
箱形图很简单:
In [16]: df.boxplot()
您可以创建一个半日志箱图,例如:
In [23]: np.log(df).boxplot()
或者,更一般地说,修改/转换为心脏的内容,然后是boxplot。
In [24]: df_mod = np.log(df).dropna()
In [25]: df_mod.boxplot()