我试图在pandas中绘制一些数据,内置的plot函数可以方便地为每列绘制一行。我想做的是根据我所做的分类手动为每一行指定一种颜色。
以下工作:
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)
我的问题是:
编辑:
我意识到,即使在第一种情况下,代码也没有达到我预期的效果。似乎只有当DataFrame和Series都是从0开始的整数索引时,pandas才匹配它们的索引。如果不是这样,则抛出一个KeyError,或者如果索引是str,则使用元素的顺序。
这是正确的吗?有没有办法匹配序列和数据帧索引?或者我必须确保按正确的顺序通过颜色列表吗?
要设置每行的颜色,可以使用参数style
。例如:
df = pd.DataFrame({'A': [1, 2, 4], 'B': [1, 3, 9]})
df.plot(style={'A': 'r', 'B': 'g'})
使用表单标记|行|颜色中的快捷字符串表示法,您还可以设置标记和行类型:
df = pd.DataFrame({'A': [1, 2, 4], 'B': [1, 3, 9]})
df.plot(style={'A': '*:r', 'B': '+--g'})
尝试:
df.plot(color = s.values)
这将分配颜色,无论索引的比例如何。
编辑:
我尝试了三个专栏:
df = pd.DataFrame({'1': [1, 2, 3, 4], '2': [1, 2, 1, 2], '3': [4, 3, 2, 1]})
s = pd.Series(['c','y','r'], index=[1,3,2])
df.plot(color = s.sort_index().values)
并对它工作的系列进行排序。
这里发生了什么?
关键字参数颜色继承自matplotlib。pyplot。plot()。文档中的详细信息没有明确说明打印时可以输入颜色列表。鉴于颜色是matplotlib中的一个关键字参数,我建议不要使用熊猫系列来保存颜色值。
我怎样才能让这个工作?
使用列表而不是序列。如果您使用的序列的索引旨在将数据帧的列与特定颜色相匹配,则需要首先对序列进行排序。如果列不按顺序排列,则还需要对列进行排序。
# Option 1
s = s.sort_index()
df.plot(color = s.values) # as per Fiabetto's answer
# Option 2
df.plot(color = ['c', 'y']) # other method
问题内容: 我试图在熊猫中绘制一些数据,并且内置的绘图功能可以方便地在每列中绘制一行。我要做的是根据我进行的分类为每行手动分配颜色。 以下作品: 但是,当我的索引是整数时,它将不再起作用并抛出为KeyError: 我的理解是,当使用整数索引时,它必须以某种方式从0开始。这是我的猜测,因为以下内容同样适用: 我的问题是: 这是怎么回事 假设我有一个不是从0开始或不是由连续数字组成的整数索引,那么我如
在使用plot命令来为数据作图时,你可以自定义颜色,线型和标记(比如加号和圆圈)。 plot(x,y,'color_style_marker') color_style_marker是一个由一到四个字符构成的字符串(用单引号括起来),用以定义颜色,线型和标记形式: 颜色字符串有'c', 'm', 'y', 'r', 'g', 'b', 'w',和'k'。分别表示青,红紫,黄,红,绿,白和黑。 线
我试图开发以下过滤器与熊猫数据帧: 我有四列,,,和 如何将其作为聚合函数编写? 下面是一个编写效率低下的工作示例: 输出:
问题内容: 如何将条件逻辑应用于Pandas DataFrame。 请参见下面显示的DataFrame, 我的原始数据显示在“数据”列中,并且期望的输出显示在其旁边。如果“数据”中的数字小于2.5,则所需的输出为False。 我可以应用循环并重新构建DataFrame …但是那是“非Python的” 问题答案: 只需将列与该值进行比较:
问题内容: 我有以下数据框 基本上我可以如下过滤行 我可以如下所示删除/删除一行 但是我想根据条件删除一定数量的行,我该怎么做? 问题答案: 最好的是但需要反转条件-使所有值相等且更高,如下所示: 与功能相同: 另一种可能的解决方案是通过以下方法反转掩码:
考虑到以下情况,我很难理解这里的机制。 我有一个从: 我想删除列a1中包含“aa”的所有行 我相信我已经尝试了这里的一切,但仍然得到了: ValueError:标签[False False False...False False]轴中不包含 是的,我也试过 任何帮助都将不胜感激,谢谢。