Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib Boxplot和dataframe数据类型_Python_Python 3.x_Pandas_Matplotlib - Fatal编程技术网

Python Matplotlib Boxplot和dataframe数据类型

Python Matplotlib Boxplot和dataframe数据类型,python,python-3.x,pandas,matplotlib,Python,Python 3.x,Pandas,Matplotlib,所以我设置了这个空数据帧DF,并根据一些条件将数据加载到数据帧中。因此,一些its元素将是空的(nan)。我注意到,如果在创建空数据帧时不将数据类型指定为float,DF.boxplot()将给我一个“索引超出范围”错误 据我所知,pandas的DF.boxplot()使用matplotlib的plt.boxplot()函数,因此我自然尝试使用plt.boxplot(DF.iloc[:,0])来绘制第一列的箱线图。我注意到一个相反的行为:当DF的dtype是float时,它将不起作用:它只会显示

所以我设置了这个空数据帧DF,并根据一些条件将数据加载到数据帧中。因此,一些its元素将是空的(
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])
将绘制一个boxplot(当我在第一次创建数据帧时添加dtype='float'时,
plt.boxplot(DF.iloc[:,0])
将给我一个空图):


我想知道这是否与
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
s,例如使用
df.dropna()


总而言之:

添加了一些重现我的问题的代码谢谢,我刚刚意识到即使
plt.boxplot()
会给我一个带有
dtype='object'
的绘图,它仍然会返回一个错误。
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()
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()