使用带有 seaborn 的 For 循环创建许多分布图
Create many distribution plots using For loop with seaborn
我正在尝试同时为几个不同的字段创建许多分布图。我创建了简单的 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'
我相信我的错误是一些基本的东西,我对循环一无所知,所以理解这对我将来有很大帮助。
我的最终目标是一次获得许多分布图(具有偏度和峰度值)而不用写出它们中的每一个。
如评论中所述,您不能从字符串列制作 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])
我正在尝试同时为几个不同的字段创建许多分布图。我创建了简单的 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'
我相信我的错误是一些基本的东西,我对循环一无所知,所以理解这对我将来有很大帮助。
我的最终目标是一次获得许多分布图(具有偏度和峰度值)而不用写出它们中的每一个。
如评论中所述,您不能从字符串列制作 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])