使用Seaborn和For循环创建多个分布图

3

我试图一次性创建多个分布图来表示不同字段的数据。我已经编写了简单的for循环,但是我一直犯同样的错误,Python不知道什么是"i"。

这是我编写的代码:

for i in data.columns:
    sns.distplot(data[i])

关键错误:'i'

我也尝试过将'i'替换为i,但是我遇到了一个错误:

类型错误:不支持/的操作数类型:'str'和'int'

我相信我的错误是一些关于循环的基础知识,所以理解这些对我以后会很有帮助。

我的最终目标是一次获得多个分布图(带有偏度和峰度值),而不需要编写每一个。


1
你的其中一列包含了字符串格式的数据。 - zipa
不行,如果你想选择只有数字的列,请使用类似 numeric_data = data._get_numeric_data() 的方法,并在 numeric_data 上进行循环。 - zipa
@zipa,你知道有没有办法在运行for循环时跳过某些列? - Reut
2个回答

3

如果只想在数值列中运行,请使用以下代码:

numeric_data = data._get_numeric_data()
for i in numeric_data.columns:
    sns.distplot(numeric_data[i])

get_numeric_data() 是获取数值的一种非常好的方式。谢谢! - javapyscript

1

如评论中所述,您无法从字符串列创建distplot。如果要忽略字符串列,您可以在迭代它们时检查每个列,如下所示:

for i in data.columns:
    if(data[i].dtype == np.float64 or data[i].dtype == np.int64):
          sns.distplot(data[i])
    else:
          //your code to handle strings.

我根据你的需求运行了一个简单的测试,在我的机器上运行良好。以下是代码:

import seaborn as sns
import matplotlib.pyplot as plt
a = [1,2,3,4]
c = [1,4,6,7,4,6,7,4,3,5,543,543,54,46,656,76,43,56]
d = [43,3,3,56,5,76,686,876,8768,78,77,98,79,8798,987,978,98]
sns.distplot(a)
e = [a,c,d]
for i, col in enumerate(e):
    plt.figure(i)
    sns.distplot(col)
plt.show()

在您的情况下,就像这样:
import matplotlib.pyplot as plt
for index, i in enumerate(data.columns):
        if(data[i].dtype == np.float64 or data[i].dtype == np.int64):
              plt.figure(index)
              sns.distplot(data[i])
        else:
              //your code to handle strings.
plt.show()

谢谢大家,我做到了并且它可以运行,但是我仍然没有得到不同的图表,只有一个图表,它并没有真正展示分布。 - Reut
运行时警告:在真除中遇到无效值 binned = fast_linbin(X,a,b,gridsize)/(delta * nobs) C:\ path \ Reutk \ Anaconda3 \ lib \ site-packages \ statsmodels \ nonparametric \ kdetools.py:34:运行时警告:在double_scalars中遇到无效值 FAC1 = 2 (np.pi * bw / RANGE)* - Reut
您已经接受了上面的答案。我认为您的问题现在已经解决了,是吗? - javapyscript
我仍然有一些问题,但与“i”无关了。 - Reut
我想要像这个链接中的例子一样 https://stackoverflow.com/questions/50940283/show-metrics-like-kurtosis-skewness-on-distribution-plot-using-seaborn-in-pytho,但是我不理解代码的第二部分。 - Reut
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接