Matplotlib Boxplot 和 pandas 数据框数据类型

liz*_*man 2 python matplotlib python-3.x pandas

所以我设置了这个空的dataframe DF,并根据一些条件将数据加载到dataframe中。因此,它的某些元素将是空的 ( nan)。我注意到,如果我在创建空数据框时没有将数据类型指定为浮点数,DF.boxplot()则会出现“索引超出范围”错误。

据我了解,pandasDF.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
Run Code Online (Sandbox Code Playgroud)

我想知道这与如何plt.boxplot()处理不同数据类型的 nan 有关系吗?如果是这样,DF.boxplot()如果熊猫只是使用 matplotlib 的 boxplot 函数,为什么将数据框的数据类型设置为“对象”不起作用?

Imp*_*est 5

我认为我们可以同意既不能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()
Run Code Online (Sandbox Code Playgroud)

使用plt.boxplot您需要nan手动删除s,例如使用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()
Run Code Online (Sandbox Code Playgroud)

总结一下:在此处输入图片说明