使用Python有效地以csv格式绘制表格

时间:2016-02-15 14:03:37

标签: python csv numpy matplotlib plot

我正在尝试使用Python绘制csv格式的表。到目前为止,我通过阅读网站上的类似问题得到了我想要的结果,但我的解决方案似乎并不太“pythonic”,也没有找到一种非常简单的方法。我确信有一种更有效的方式来绘制表格,所以我要问这个问题,以便更多地了解Python,并让其他人对同一问题有一个直接的答案。在这里:

我有一个包含数据的表,它有标题和第一列。就我而言,分别是几个月和几年。即:

  

年份,一月,二月,三月,四月,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DIC   1998年,0.78,0.60,0.50,0.50 ,,,,, 0.62,,0.45   1999,0.40,0.30,0.28,0.22,0.26,0.50,0.52,0.76,0.89,0.85,0.74,0.67   2000,0.58,0.58,0.51,0.47,0.63,0.92,1.00,1.00,0.99,1.00,0.96,0.91   2001,0.86,0.83,0.80,0.71,0.83,0.98,1.05,1.11,1.09,0.99,0.87,0.80   ...

如您所见,数据也缺失。

我的解决方案如下:

import numpy as np
from matplotlib import pyplot as plt

#Import Data
Data=np.genfromtxt('LakeLevels.csv',delimiter=',',names=True,dtype=float)

#Extract data
Months=list(Data.dtype.names[1:])
Years=Data['Year']
Level=Data.view(dtype=float).reshape(Data.shape + (-1,))[:,1:]
Level_masked= np.ma.array (Level, mask=np.isnan(Level))

#Plot
fig=plt.pcolor(np.linspace(1,12,12),Years,Level_masked)
plt.colorbar()
plt.xticks(range(12),Months,rotation=45)

我发现解决方案过于复杂,无法执行非常简单的任务。是否有更好的方法来实现相同的结果或部分代码我可以改进?甚至可能是自动执行此操作的功能。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以考虑使用Pandas进行重叠+数据绘图。

我没有完全遵循你的逻辑(即掩码),但这里是以下两行的输出(部分数据):

import pandas as pd

df = pd.read_csv('stuff.csv', delimiter=',', index_col='year').T.plot();

enter image description here

您拥有的内容越多(例如,处理丢失的数据等) - 代码行的差异就越长。 Numpy很棒,但你应该使用更高级别的库(构建它!) - 对于这类东西。

答案 1 :(得分:0)

我将根据@Ami Tavory的回答发布我的最终解决方案。

import pandas as pd
import seaborn as sns

df = pd.read_csv('LakeLevels.csv', delimiter=',', index_col='Year')
sns.heatmap(df)

因此,通过使用这2个包(即熊猫和海鸟),我能够在2行中得到我想要的结果!

最好的问候。