Python AttributeError:“float”对象在使用seaborn时没有属性“shape”

Python AttributeError:“float”对象在使用seaborn时没有属性“shape”,python,seaborn,attributeerror,Python,Seaborn,Attributeerror,我创建了一个随机数据框,模拟seaborn的数据集提示: 对于每个列,我的dataFrame df具有与seaborn数据集中的dataFrame提示相同的类类型: tips = sns.load_dataset("tips") type(tips["total_bill"][0]) type(tips["time"][0]) numpy.64 str 其他栏目也是如此。与我的数据帧相同: type(df["total_bill"][0]) type(tips["time"][0]) num

我创建了一个随机数据框,模拟seaborn的数据集提示:

对于每个列,我的dataFrame df具有与seaborn数据集中的dataFrame提示相同的类类型:

tips = sns.load_dataset("tips")
type(tips["total_bill"][0])
type(tips["time"][0])
numpy.64

str

其他栏目也是如此。与我的数据帧相同:

type(df["total_bill"][0])
type(tips["time"][0])
numpy.64

str

然而,当我尝试使用seaborn的violinplot或factorplot时:

如果我使用数据帧提示,我没有问题,但是当我使用数据帧时,我得到:

AttributeError:“float”对象没有属性“shape”

我想这是我将数组传递到数据帧的方式的问题,但我找不到问题所在,因为我在互联网上找到的每个问题都有相同的AttributeError,他说这是因为它不是相同类型的类,如上所示,我的数据帧与seaborn文档中的类具有相同类型的类


有什么建议吗?

这是一种非常不寻常的创建数据帧的方法。生成的数据帧还具有一些非常奇怪的属性,例如,它的长度为50,但最后一个索引为88。我不打算调试这些嵌套循环。相反,我建议从一些numpy数组创建数据帧,例如

import numpy as np
import pandas as pd

time = ['day','night']
sex = ['female','male']
smoker = ['yes','no']

data = np.repeat(np.stack(np.meshgrid(time, sex, smoker), -1).reshape(-1,3), 10, axis=0)
df = pd.DataFrame(data, columns=["time","sex","smoker"])
df["total_bill"] = np.random.rand(len(df))*10
然后,绘图也可以很好地工作:

g = sns.factorplot(x="sex", y="total_bill", hue="smoker", col="time",  data=df, 
                   kind="violin", size=4, aspect=.7)

这是一种非常不寻常的创建数据帧的方法。生成的数据帧还具有一些非常奇怪的属性,例如,它的长度为50,但最后一个索引为88。我不打算调试这些嵌套循环。相反,我建议从一些numpy数组创建数据帧,例如

import numpy as np
import pandas as pd

time = ['day','night']
sex = ['female','male']
smoker = ['yes','no']

data = np.repeat(np.stack(np.meshgrid(time, sex, smoker), -1).reshape(-1,3), 10, axis=0)
df = pd.DataFrame(data, columns=["time","sex","smoker"])
df["total_bill"] = np.random.rand(len(df))*10
然后,绘图也可以很好地工作:

g = sns.factorplot(x="sex", y="total_bill", hue="smoker", col="time",  data=df, 
                   kind="violin", size=4, aspect=.7)

我遇到了同样的问题,并试图找到一个解决方案,但没有看到我正在寻找的答案。所以我想在这里提供一个答案可能会帮助像我这样的人

这里的问题是df.total_bill的类型是object而不是float

因此,解决方案是在将数据帧传递给seaborn之前将其更改为float:

df.total_bill = df.total_bill.astype(float)

我遇到了同样的问题,并试图找到一个解决方案,但没有看到我正在寻找的答案。所以我想在这里提供一个答案可能会帮助像我这样的人

这里的问题是df.total_bill的类型是object而不是float

因此,解决方案是在将数据帧传递给seaborn之前将其更改为float:

df.total_bill = df.total_bill.astype(float)

我的代码中有一个不同的问题,产生了相同的错误:

'str' object has no attribute 'get'

对我来说,我有我的seaborn语法…data='df'。。。然而,其中df是一个对象,不应在引号中。一旦我删除了引号,我的程序就运行得很好。我犯了这个错误,就像其他人可能犯的那样,因为x=和y=参数在dataframe中的列的引号中

我的代码中有一个不同的问题,导致了相同的错误:

'str' object has no attribute 'get'

对我来说,我有我的seaborn语法…data='df'。。。然而,其中df是一个对象,不应在引号中。一旦我删除了引号,我的程序就运行得很好。我犯了这个错误,就像其他人可能犯的那样,因为x=和y=参数在dataframe中的列的引号中

将变量的数据类型从object转换为float/int。

将变量的数据类型从object转换为float/int。

我知道这是一种非常不寻常的创建数据帧的方法。也许我应该澄清一下,我是这样创建的,因为我需要有4个循环,在每个循环中,我根据每个循环的参数进行一些计算。所以我需要将我也不知道它将要具有的形状的数据附加到最终的数据帧。也许有更好的方法,但就我所知,这是我能做的最好的了。问题还是一样。当我传递的数据与示例中的数据类型相同时,为什么会出现此错误?因为您正在覆盖某些数据,而不是附加它。这是一个简单的检查:您希望在数据帧中看到2*3*10=80行,但它只有50行。如果您在创建数据帧时遇到问题,请询问该问题,而不是打印它。在任何情况下,即使您想要使用嵌套循环,我仍然建议您首先创建一个列表,将行附加到其中,而不是索引现有的数据帧。一旦创建了这个列表,就从中创建一个数据框。谢谢,我问了这个图,因为我没有意识到我的问题是数据框。我按照你在这里解释的做了,效果很好!我相信答案id是DataFrame的格式,整个列不能是一个对象,请参阅pd.DataFrame.info详细信息并使用pd.to_numeric转换。。。我知道这是一种非常不寻常的创建数据帧的方式。也许我应该澄清一下,我是这样创建的,因为我需要有4个循环,在每个循环中,我根据每个循环的参数进行一些计算。所以我需要将我也不知道它将要具有的形状的数据附加到最终的数据帧。有可能
这可能是更好的方法,但就我所知,这是我能做的最好的方法。问题还是一样。当我传递的数据与示例中的数据类型相同时,为什么会出现此错误?因为您正在覆盖某些数据,而不是附加它。这是一个简单的检查:您希望在数据帧中看到2*3*10=80行,但它只有50行。如果您在创建数据帧时遇到问题,请询问该问题,而不是打印它。在任何情况下,即使您想要使用嵌套循环,我仍然建议您首先创建一个列表,将行附加到其中,而不是索引现有的数据帧。一旦创建了这个列表,就从中创建一个数据框。谢谢,我问了这个图,因为我没有意识到我的问题是数据框。我按照你在这里解释的做了,效果很好!我相信答案id是DataFrame的格式,整个列不能是一个对象,请参阅pd.DataFrame.info详细信息并使用pd.to_numeric转换。。。是的,我在尝试在不同的数据帧上执行violinplot时遇到了相同的问题,并且当我明确定义了我试图用作y列作为浮点的列的数据类型时,问题就消失了。所以我认为这个答案实际上就是这个问题的答案。你也可以使用pd的转换。到_数值。。。是的,我在尝试在不同的数据帧上执行violinplot时遇到了相同的问题,并且当我明确定义了我试图用作y列作为浮点的列的数据类型时,问题就消失了。所以我认为这个答案实际上就是这个问题的答案。你也可以使用pd的转换。到_数值。。。