繁体   English   中英

Matplotlib Boxplot和pandas数据帧数据类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM