遍历熊猫数据框以生成箱线图时出错

时间:2021-03-26 15:08:30

标签: python pandas dataframe boxplot

我想为 df panda 数据框中的每个属性生成一个箱线图。

当我尝试下面的代码时,

features = df.columns
#print(features)
temp_df = pd.DataFrame(df3, columns=[features[1]])
temp_df.boxplot()

第一个特征的箱线图已成功生成,但从第二个特征开始,它给了我以下错误。

usr/local/lib/python3.7/dist-packages/pandas/plotting/_core.py in boxplot_frame(self, column, by, ax, fontsize, rot, grid, figsize, layout, return_type, backend, **kwargs)
    503         layout=layout,
    504         return_type=return_type,
--> 505         **kwargs,
    506     )
    507 

/usr/local/lib/python3.7/dist-packages/pandas/plotting/_matplotlib/boxplot.py in boxplot_frame(self, column, by, ax, fontsize, rot, grid, figsize, layout, return_type, **kwds)
    389         layout=layout,
    390         return_type=return_type,
--> 391         **kwds,
    392     )
    393     plt.draw_if_interactive()

/usr/local/lib/python3.7/dist-packages/pandas/plotting/_matplotlib/boxplot.py in boxplot(data, column, by, ax, fontsize, rot, grid, figsize, layout, return_type, **kwds)
    357             data = data[columns]
    358 
--> 359         result = plot_group(columns, data.values.T, ax)
    360         ax.grid(grid)
    361 

/usr/local/lib/python3.7/dist-packages/pandas/plotting/_matplotlib/boxplot.py in plot_group(keys, values, ax)
    302             ticks = ax.get_xticks()
    303             if len(ticks) != len(keys):
--> 304                 i, remainder = divmod(len(ticks), len(keys))
    305                 assert remainder == 0, remainder
    306                 keys *= i

ZeroDivisionError: integer division or modulo by zero

非常感谢能对此提供帮助!!

1 个答案:

答案 0 :(得分:0)

boxplot 与大多数 Pandas 绘图函数一样,需要数字数据。此外,数据必须在 DataFrame 中指定为数字类型。

您的 df3[features[1]] 是否设置为对象类型?我刚刚遇到了这个问题,意识到数据被标记为对象并强制使用数据类型解决了这个问题。

试试 temp_df = pd.DataFrame(df3, columns=[features[1]], dtype='float'),或者任何对你有意义的数字类型。