【发布时间】:2015-12-08 03:32:50
【问题描述】:
我正在尝试在 pandas 中绘制一些数据,并且内置的绘图功能可以方便地每列绘制一条线。我想要做的是根据我所做的分类手动为每条线分配颜色。
以下作品:
df = pd.DataFrame({'1': [1, 2, 3, 4], '2': [1, 2, 1, 2]})
s = pd.Series(['c','y'], index=['1','2'])
df.plot(color = s)
但是当我的索引是整数时,它不再起作用并作为 KeyError 抛出:
df = pd.DataFrame({1: [1, 2, 3, 4], 2: [1, 2, 1, 2]})
s = pd.Series(['c','y'], index=[1,2])
df.plot(color = s)
我的理解是,当使用整数索引时,它必须以某种方式从 0 开始。这是我的猜测,因为以下方法也适用:
df = pd.DataFrame({0: [1, 2, 3, 4], 1: [1, 2, 1, 2]})
s = pd.Series(['c','y'], index=[1,0])
df.plot(color = s)
我的问题是:
- 这里发生了什么?
- 假设我有一个不是从 0 开始或不是由连续数字组成的整数索引,我如何才能在不将索引转换为字符串或从 0 开始重新索引的情况下完成这项工作?
编辑:
我意识到,即使在第一种情况下,代码也没有达到我的预期。 似乎只有当 DataFrame 和 Series 的索引都是从 0 开始的整数索引时,pandas 才匹配索引。如果不是这种情况,则会抛出 KeyError 或者如果索引是 str 则使用元素的顺序。
这是正确的吗?有没有办法匹配 Series 和 DataFrame 索引?还是我必须确保以正确的顺序传递颜色列表?
【问题讨论】:
-
您不希望索引匹配。您正在将 Series 的索引与 DataFrame 的列匹配。