【问题标题】:Efficiently ploting a table in csv format using Python使用 Python 高效地绘制 csv 格式的表格
【发布时间】:2016-05-26 11:36:59
【问题描述】:

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

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

年、1 月、2 月、3 月、4 月、5 月、6 月、7 月、8 月、9 月、10 月、11 月、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)

我发现解决方案对于一个非常简单的任务来说太复杂了。有没有更好的方法来实现相同的结果或我可以改进的部分代码?甚至可能是一个自动执行此操作的函数。

提前致谢。

【问题讨论】:

  • 你想怎么画?
  • 很抱歉没有解决这个问题。我认为我的示例代码显示了它。 pcolor 或 imshow 很好。在每个“正方形”上添加标签在小表格中看起来不错,尽管我确信这在其他问题中得到了回答。
  • 我认为命名我想要的情节的正确方法是“热图”
  • 鉴于numpy 数组的性质,它看起来像是一个直接的解决方案,甚至很聪明。与pandas 不同,numpy 没有table 的概念,具有行标签和列标签。

标签: python csv numpy matplotlib plot


【解决方案1】:

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

import pandas as pd
import seaborn as sns

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

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

最好的问候。

【讨论】:

    【解决方案2】:

    您可以考虑使用Pandas 进行这种数据处理+ 绘图。

    我没有一直遵循您的逻辑(即掩码),但这是以下两行的输出(在您的部分数据上):

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

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

    【讨论】:

    • 感谢您的回答阿米。我一定会看看熊猫。至于结果,您的答案并没有真正得到我想要的那种情节(一种 pcolor 或 imshow 情节),但我确实知道在 Pandas 上导入 csv 是多么容易。顺便说一句,掩蔽是为了“隐藏” pcolor 图中的 nan 值(如果没有,我只得到 2 种颜色:一种用于数据,另一种用于 nan 值)。问候。
    • @jcdoming 我明白你的意思。再次强调(尽管它确实反映在您的评论中),我的意思不是要完全重新创建您的情节(迷失在面具上),而是要指出 numpy 是(恕我直言)太低级了东西。
    • 简单而完美。非常感谢。我仍在从 Matlab 切换到 Python,直到现在我才知道 Pandas。这就是诀窍。最好的问候。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多