因此,我设置了这个空的数据框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数据框数据类型-LMLPHP

关于python - Matplotlib Boxplot和Pandas数据框数据类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44209159/

10-12 18:29