Seaborn绘制由列表构成的数据框时,pandas返回DataError

时间:2019-04-04 11:40:46

标签: python pandas dataframe seaborn

当我尝试在seaborn中绘制熊猫数据框时,出现了DataError。我通过从Dictionary重新创建数据框而不是使用列表和for循环来解决此问题。但是,我仍然不明白为什么在第一种情况下会出现错误。这两个数据框看起来与我相同。有人可以解释这里发生了什么吗?

# When I create two seemingly identical data frames.
x = [0, 1, 2]
y = [3, 5, 7]
line_df1 = pd.DataFrame(columns=['x','y'])
for i in range(3):
    line_df1.loc[i] = [x[i], y[i]]

line_dict = {'x': [0, 1, 2], 'y': [3, 5, 7]}
line_df2 = pd.DataFrame(line_dict)

# they look identical when printed
print(line_df1)
print(line_df2)

>>    x  y
>> 0  0  3
>> 1  1  5
>> 2  2  7

>>    x  y
>> 0  0  3
>> 1  1  5
>> 2  2  7


# This first one throws a DataError...
sns.lineplot('x', 'y', data=line_df1)

# ..but this one does not.
sns.lineplot('x', 'y', data=line_df2)

1 个答案:

答案 0 :(得分:2)

问题是第一个值是对象,并由DataFrame.dtypes验证:

print(line_df1.dtypes)
x    object
y    object
dtype: object

print(line_df2.dtypes)
x    int64
y    int64
dtype: object

将正确工作的第一个解决方案的解决方案设置为dtype为空的DataFrame

line_df1 = pd.DataFrame(columns=['x','y'], dtype=int)

但是如果性能很重要,那么更好的选择是第二个解决方案,因为更新为空的DataFramelast instance

  

6)更新一个空框架(例如一次使用loc)