每个列数据框的分布概率,在一个图中

Posted

技术标签:

【中文标题】每个列数据框的分布概率,在一个图中【英文标题】:Distribution probabilities for each column data frame, in one plot 【发布时间】:2018-11-29 19:38:06 【问题描述】:

我正在通过 seaborn 库 sns.distplot() 中的 distplot 为我的数据帧的每一列创建概率分布。对于一个情节我做

x = df['A']
sns.distplot(x);

我正在尝试使用 FacetGrid 和 Map 一次为每列绘制所有图 这样。但根本不起作用。

  g = sns.FacetGrid(df, col = 'A','B','C','D','E')
  g.map(sns.distplot())

【问题讨论】:

【参考方案1】:

我认为您需要使用 melt 将您的数据框重塑为长格式,请参阅此 MVCE:

df = pd.DataFrame(np.random.random((100,5)), columns = list('ABCDE'))
dfm = df.melt(var_name='columns')
g = sns.FacetGrid(dfm, col='columns')
g = (g.map(sns.distplot, 'value'))

输出:

【讨论】:

非常感谢。我用融化选项得到了惊人的情节。我确实需要通过创建一列 = 先前列的列表来重塑我的数据框。 @Annalix 我很高兴这对你有用。编码愉快!【参考方案2】:

您在两个层面上都犯了这个错误。

Python 语法。FacetGrid(df, col = 'A','B','C','D','E') 无效,因为 col 被设置为 A 并且剩余的字符被解释为进一步的参数。但由于它们没有命名,这是无效的 python 语法。

Seaborn 概念。

Seaborn 需要一个列名作为 colrow 参数的输入。这意味着数据框需要采用具有一列的格式,该列确定相应数据所属的列或行。

您没有调用 map 使用的函数。这个想法当然是map 自己调用它。

解决方案:

循环列:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame(np.random.randn(14,5), columns=list("ABCDE"))

fig, axes = plt.subplots(ncols=5)
for ax, col in zip(axes, df.columns):
    sns.distplot(df[col], ax=ax)

plt.show()

融化数据框

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame(np.random.randn(14,5), columns=list("ABCDE"))

g = sns.FacetGrid(df.melt(), col="variable")
g.map(sns.distplot, "value")

plt.show()

【讨论】:

【参考方案3】:

您可以使用以下内容:

# listing dataframes types
list(set(df.dtypes.tolist()))
# include only float and integer
df_num = df.select_dtypes(include = ['float64', 'int64'])
# display what has been selected
df_num.head()
# plot
df_num.hist(figsize=(16, 20), bins=50, xlabelsize=8, ylabelsize=8);

【讨论】:

【参考方案4】:

我认为最简单的方法是循环列并创建一个图。

import numpy as np
improt pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.random((100,5)), columns = list('ABCDE'))
for col in df.columns:
    hist = df[col].hist(bins=10)
    print("Plotting for column ".format(col))
    plt.show()

【讨论】:

以上是关于每个列数据框的分布概率,在一个图中的主要内容,如果未能解决你的问题,请参考以下文章

概率分布

在派生自熊猫数据框的图中自定义图例

如何按列绘制数据框的多个字典?蟒蛇熊猫

检查 Pandas 数据框的异常值 [重复]

熊猫如何在数据框的相应列检查行的每个元素的百分位数

理解随机游走