绘制pandas数据框,但大多数列都有零

时间:2013-11-07 00:53:31

标签: matplotlib pandas ipython

我是熊猫和ipython的新手,我只是设置了一切并且正在玩耍。我有以下数据框:

  Field  10   20   30   40   50   60   70   80   90   95
0   A   0    0    0    0    0    0    0    0    1    3
1   B   0    0    0    0    0    0    0    1    4   14
2   C   0    0    0    0    0    0    0    1    2    7
3   D   0    0    0    0    0    0    0    1    5   15
4   u   0    0    0    0    0    0    0    1    5   14
5   K   0    0    0    0    0    0    1    2    7   21
6   S   0    0    0    0    0    0    0    1    3    8
7   E   0    0    0    0    0    0    0    1    3    8
8   F   0    0    0    0    0    0    0    1    6   16

我使用csv文件导入此数据:

df = pd.read_csv('/mycsvfile.csv', 
                         index_col=False, header=0)

正如你可以看到列的帖子为零,这个数据框有很多行但是有可能在列中大多数行可以为零而一个或两个剩余的值为" 70&# 34。

我怎么能把它变成漂亮的图形,我可以在这里强调显示70,80,95列。

我找到了以下教程:[ http://pandas.pydata.org/pandas-docs/version/0.9.1/visualization.html ][1]但我仍然无法获得良好的数据。

1 个答案:

答案 0 :(得分:4)

这取决于你想如何处理零值,但这是一种方法:

df = pd.DataFrame({'a': [0,0,0,0,70,0,0,90,0,0,80,0,0],
                       'b': [0,0,0,50,0,60,0,90,0,80,0,0,0]})

fig, axs = plt.subplots(1,2,figsize=(10,4))

# plot the original, for comparison
df.plot(ax=axs[0])

for name, col in df.iteritems():
    col[col != 0].plot(ax=axs[1], label=name)

axs[1].set_xlim(df.index[0],df.index[-1])
axs[1].set_ylim(bottom=0)
axs[1].legend(loc=0)

enter image description here

你也可以选择.replace(0,np.nan),但如果中间有nan,则matplotlib不会绘制线条。所以你最终可能最终会在列上循环(然后使用dropna().plot())。