使用For loop和seaborn创建许多分布图

2024-05-17 12:13:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图一次创建多个分布图到几个不同的字段。我已经创建了简单for循环,但我总是犯同样的错误,python不理解什么是“I”

这是我写的代码:

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

KeyError: 'i'

我也试着用“I”代替“I”,但我发现了一个错误:

TypeError: unsupported operand type(s) for /: 'str' and 'int'

我相信我的错误是一些基本的东西,我不知道循环,所以明白这将帮助我在未来很多

我的最终目标是一次得到许多分布图(带有偏度和峰度值),而不必写每一个分布图


Tags: columns代码infordatatype错误分布图
2条回答

如注释中所述,不能从字符串列生成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()

要仅在数值列上运行,请使用:

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

相关问题 更多 >