【问题标题】:Create many distribution plots using For loop with seaborn使用 For 循环和 seaborn 创建许多分布图
【发布时间】:2020-03-20 12:31:13
【问题描述】:

我正在尝试一次为几个不同的字段创建多个分布图。我创建了简单的 for 循环,但我总是犯同样的错误,python 不明白什么是“i”。

这是我写的代码:

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

KeyError: 'i'

我也尝试用 'i' 代替 i,但出现错误:

TypeError: /: 'str' 和 'int' 的操作数类型不受支持

我相信我的错误是我对循环一无所知的基本错误,因此请理解这将对我将来有很大帮助。

我的最终目标是一次获得许多分布图(具有偏度和峰度值),而无需逐一编写。

【问题讨论】:

  • 您的某一列包含string 格式的数据。
  • 不,如果您只想选择数字列,请使用 numeric_data = data._get_numeric_data() 之类的内容并在 numeric_data 上执行循环。
  • @zipa 明白,有没有办法运行 for 循环,但告诉它跳过一些列?

标签: python for-loop seaborn distribution


【解决方案1】:

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

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

【讨论】:

  • _get_numeric_data() 是获取数值的好方法。谢谢!
【解决方案2】:

如 cmets 中所述,您不能从字符串列制作 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()

【讨论】:

  • 谢谢大家,我做到了,它运行了,但我仍然没有得到不同的情节,但是一个情节并没有真正显示分布
  • RuntimeWarning: true_divide binned = fast_linbin(X, a, b, gridsize) / (delta * nobs) C:\path\Reutk\Anaconda3\lib\site-packages\statsmodels 中遇到无效值nonparametric\kdetools.py:34: RuntimeWarning: double_scalars FAC1 = 2*(np.pibw/RANGE)* 中遇到无效值
  • 您已接受上述答案。我想您的问题现在已经解决了?
  • 好吧,我对此仍有一些疑问,但与“i”无关
  • 看看这篇文章。这与您要实现的目标非常相似? stackoverflow.com/questions/55770326/…
猜你喜欢
  • 2018-01-27
  • 2014-07-11
  • 1970-01-01
  • 2021-10-20
  • 2021-10-08
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多