[英]Matplotlib Boxplot and pandas dataframe data type
因此,我根据某些条件设置了这个空数据帧DF并将数据加载到数据帧中。 因此,其中一些元素将为空( nan
)。 我注意到如果在创建空数据帧时没有将数据类型指定为float, DF.boxplot()
将给出“索引超出范围”错误。
据我所知,pandas的DF.boxplot()
使用了matplotlib的plt.boxplot()
函数,所以很自然地我尝试使用plt.boxplot(DF.iloc [:,0])绘制第一列的boxplot。 我注意到了一个反转的行为:当DF的dtype是浮动时,它将无法工作:它只会显示一个空图。 请参阅下面的代码,其中DF.boxplot()
不会工作,但plt.boxplot(DF.iloc[:,0])
将绘制一个boxplot(当我在第一次创建数据帧时添加dtype ='float', plt.boxplot(DF.iloc[:,0])
会给我一个空图():
import numpy as np
import pandas as pd
DF=pd.DataFrame(index=range(10),columns=range(4))
for i in range(10):
for j in range(4):
if i==j:
continue
DF.iloc[i,j]=i
我想知道这与plt.boxplot()
如何处理不同数据类型的nan有关吗? 如果是这样,为什么将数据帧的数据类型设置为'object'对DF.boxplot()
不起作用,如果pandas只使用matplotlib的boxplot函数?
我想我们可以同意df.boxplot()
和plt.boxplot
都不能处理“object”类型的数据帧。 相反,它们需要是数字数据类型。
如果数据是数字,则df.boxplot()
将按预期工作,即使使用nan
值,因为它们在绘图之前被删除。
import pandas as pd
import matplotlib.pyplot as plt
df=pd.DataFrame(index=range(10),columns=range(4), dtype=float)
for i in range(10):
for j in range(4):
if i!=j:
df.iloc[i,j]=i
df.boxplot()
plt.show()
使用plt.boxplot
您需要手动删除nan
,例如使用df.dropna()
。
import pandas as pd
import matplotlib.pyplot as plt
df=pd.DataFrame(index=range(10),columns=range(4), dtype=float)
for i in range(10):
for j in range(4):
if i!=j:
df.iloc[i,j]=i
data = [df[i].dropna() for i in range(4)]
plt.boxplot(data)
plt.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.