因此,我设置了这个空的数据框DF,并根据某些条件将数据加载到该数据框中。因此,其某些元素将为空(nan
)。我注意到,如果在创建空数据框时未将数据类型指定为float,则DF.boxplot()
会给我一个'索引超出范围'错误。
据我了解,pandas的DF.boxplot()
使用matplotlib的plt.boxplot()
函数,所以自然地我尝试使用plt.boxplot(DF.iloc [:,0])绘制第一列的箱线图。我注意到一个相反的行为:当DF的dtype为float时,它将不起作用:它将仅显示一个空图。请参见下面的代码,其中DF.boxplot()
无法正常工作,但是plt.boxplot(DF.iloc[:,0])
将绘制箱形图(当我首次创建数据框时添加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有关吗?如果是这样,如果熊猫仅使用matplotlib的boxplot函数,为什么将数据框的数据类型设置为“对象”对于DF.boxplot()
不起作用? 最佳答案
我认为我们可以同意df.boxplot()
和plt.boxplot
都不能处理“对象”类型的数据帧。相反,它们必须是数字数据类型。
如果数据为数字,则即使使用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()
总结一下:
关于python - Matplotlib Boxplot和Pandas数据框数据类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44209159/