Pandas按索引绘制数据框架,它是如何工作的?

时间:2016-10-08 20:21:44

标签: python python-2.7 pandas matplotlib dataframe

鉴于数据:

Column1; Column2; Column3
1; 4; 6
2; 2; 6
3; 3; 8
4; 1; 1
5; 4; 2

使用以下代码,我得到以下图形:

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('test0.csv',delimiter='; ', engine='python')
df.plot(0,0)
plt.savefig('fig0.png')

enter image description here

并且,使用以下代码,我得到以下图形:

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('test0.csv',delimiter='; ', engine='python')
df.plot(0,1)
plt.savefig('fig1.png')

enter image description here

df.plot(m,n)中的逻辑是什么?我们想说我想要Column2 X Column3 mndf.plot(2,3))?

3 个答案:

答案 0 :(得分:3)

在查找x之前,将从DataFrame中删除用作y的任何列。 (或者,从技术上讲,x被设置为索引,这意味着它不再作为列提供。)因此,如果您执行.plot(x=0, y=0)x=0表示“使用第一个位置列“,y=0表示”删除x列后使用的第一个位置列“。

毋庸置疑,这可能会让人感到困惑,因为y位置的变化取决于它是在x之前还是之后。因此,如果你执行.plot(x=3, y=1),那么y确实是第1列,但是如果你执行.plot(x=0, y=1),那么y实际上是第2列(在删除第0列后它变为数字1)。

答案 1 :(得分:1)

按顺序位置指定xy时,您在致电df.plot(x, y)时会显示this bit of code

    if isinstance(data, DataFrame):
        if x is not None:
            if com.is_integer(x) and not data.columns.holds_integer():
                x = data.columns[x]
            data = data.set_index(x)

这会将x从序数值(例如0)转换为列标签名称(例如'Column1')。 请注意,data.set_index(x)被调用。因此,如果x等于0,则将第一列设置为索引。接下来,当y类似地转换为列标签时, 第0列现在是'Column2'。因此,df.plot(0,0)绘制了Column2与Column1的对比。

要绘制Column3与Column2的关系,您将使用df.plot(1,1),因为data.columns[1]'Column2',然后将其设置为索引后,data.columns[1]就会'Column3' 1}}。

在注释中作为BrenBarn points out,通过标签名称,更容易出错的指定列的方式。 或者,如果您确实想使用序数值,请将它们明确地传递给df.columns

df.plot(x=df.columns[x], y=df.columns[y])

由于df.columns[x]df.columns[y]是列标签名称,因此它们的含义不受set_index的影响,因此混淆较少。

答案 2 :(得分:1)

根据documentation,您可以定义 m n x y 在文档中)像这样:

df.plot(df.columns[1],df.columns[2])
  • 'm'应该是 - > df.columns[1],即位置1的列名
  • 'n'应该是 - > df.columns[2],即位置2的列名

如果你想使用这些职位,那就是:

df.plot(1,1)

使用位置的逻辑是:当我们将 1 放在水平轴上时,此列将从垂直轴的选项中删除,因此只有两个选项可用(使用新索引)。这就是为什么df.plot(0,0)实际设置第一列和下一列作为数据而df.plot(1,1)使用第二列和最后一列的原因。我没有在文档中找到它,我发现它正在测试。

我认为这个想法是:没有意义在x轴和y轴上绘制相同的列,因此给出的第一列不适用于另一个轴。我希望它有所帮助! =)

PS:它将以奇怪的缩放和位置绘制,但如果缩小并在图中移动,您将确认值与每列的数据匹配