ValueError:将索引与seaborn线图一起使用时,无法解释输入“索引”

Max*_*axS 3 python python-2.7 pandas seaborn

我想将pandas DataFrame的索引用作seaborn的x值,并引发值错误。一个小测试示例:

import pandas as pd
import seaborn as sns
sns.lineplot(x='index',y='test',hue='test2',data=pd.DataFrame({'test':range(9),'test2':range(9)}))
Run Code Online (Sandbox Code Playgroud)

它提出:

ValueError: Could not interpret input 'index'
Run Code Online (Sandbox Code Playgroud)

不能将索引用作x值?我究竟做错了什么?Python 2.7,Seaborn 0.9

Imp*_*est 8

您需要确保提供给x参数的字符串实际上是数据框中的一列。实现这一目标的最简单的解决方案是重置数据帧的索引以将索引转换为列。

# reset the index, which results in a column named index
df = pd.DataFrame({'test':range(9),'test2':range(9)}).reset_index()

ax = sns.lineplot(x='index', y='test', data=df)
Run Code Online (Sandbox Code Playgroud)

最初的df

# reset the index, which results in a column named index
df = pd.DataFrame({'test':range(9),'test2':range(9)}).reset_index()

ax = sns.lineplot(x='index', y='test', data=df)
Run Code Online (Sandbox Code Playgroud)

dfreset_index

   test  test2
0     0      0
1     1      1
2     2      2
3     3      3
4     4      4
5     5      5
6     6      6
7     7      7
8     8      8
Run Code Online (Sandbox Code Playgroud)


She*_*ore 7

我宁愿以这种方式使用它。您需要删除,hue因为我认为它具有不同的用途,该用途不适用于当前的DataFrame,因为您只有一行。在此处访问官方文档以获取更多信息。

df=pd.DataFrame({'test':range(9),'test2':range(9)})
sns.lineplot(x=df.index, y='test', data=df)
Run Code Online (Sandbox Code Playgroud)

输出量

在此处输入图片说明

  • 或者,您可以按照 [Seaborn 根据计算值](/sf/answers/3626931451/) `df = df.reset_index()` 中所述重置索引。 (3认同)