迭代行并收集输出值。 Numpy和Python 3.6

时间:2018-05-21 21:39:42

标签: python python-3.x pandas numpy matplotlib

更新5/22/18:@aorr在原始问题下回答。

我正在尝试为数千个输入收集每个ID和该ID的数据。

我正在尝试收集每个ID的每一行,对日期进行排序,然后绘制每个ID +加数据并导出每个ID的图表。

被修改 样本数据:

  • Col name:Id Date O G Company Date2

  • aab72ffd-4d0b-4c62-b6fe-4c55b98be9a0 3/1/1999 180.66 673 A 1/1/1996

  • aab72ffd-4d0b-4c62-b6fe-4c55b98be9a0 3/1/1995 173.9 651 A 1/1/1996
  • a15961bc-0263-4c66-a825-1deb69bda8be 12/1/2010 55.14 542 C 1/1/2011
  • a15961bc-0263-4c66-a825-1deb69bda8be 5/1/2012 49.24 577 C 1/1/2011
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 12/1/2000 48.14 290 D 3/1/2002
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 3/1/2003 69.03 282.5 D 3/1/2002

  • 所需的输出数组/图表,但按日期排序。

  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 7/1/2005 28.24 327
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 10/1/1998 45.11 335
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 7/1/2001 28.22 348
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 7/1/1997 44.53 350.5
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 8/1/2001 28.4 333.5
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 10/1/2005 41.72 314
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 12/1/2001 29.53 313.5
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 8/1/2002 43.24 319

到目前为止我输入的代码成功创建了不同数据类型的索引数组。现在,我只是试图遍历所有行并组织数据,以便根据ID打印/写入单个数组/图表。

这是我到目前为止所做的:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np 

#import data
mydataset = pd.read_csv('input_test.csv', dtype=None)

x = mydataset.iloc[:,:].values
y = mydataset.iloc[:,:].values

#Id
b = np.array((x[:,0]), dtype=str)
#Date
c = np.array((x[:,1]), dtype=str)
# O Var
d = np.array((x[:,2]), dtype=int)
# G var
e = np.array((x[:,3]), dtype=int)
#Stack
f = np.vstack((b,c,d,e))
#Transpose array
g = f.T

#Plot data
plt.figure()
plt.plot(x[:,2], y[:,3], label ='Rate over time')
plt.xlabel('m')
plt.ylabel('r/m')
#plt.legend()

根据@aorr回复更新 感谢帮助我们的新手。

在Y轴上绘制O和G,在X轴上绘制日期,每个Id 。一切都根据日期排序。这个数据扩展的重要出发点。根据更新更多关注。

for Id in data['Id'].unique():
    fig, ax = plt.subplots(figsize=(5,3))
    plot_data = data.query("Id==@Id").sort_values('Date')
    _ = plot_data.plot(x='Date',y='O', ax=ax)
    _ = plot_data.plot(x='Date', y='G', ax=ax)
#Plot Company name in each chart
    for Company in plot_data[Company]:
        _ = plt.title(Company)
            #Plot Date2 Event onto X-axis
            for Date2 in plot_data[Date2]:
                _ = plt.axvline(Date2)     

1 个答案:

答案 0 :(得分:0)

您是否尝试使用pandas解决此问题?我认为您不需要为每个元素创建numpy数组,pandas已经在内部将它们存储为ndarrays

import matplotlib.pyplot as plt

data = pd.read_csv('input_test.csv', parse_dates=['date'])

for id in data['id'].unique():
    fig, ax = plt.subplots(figsize=(5,3))
    plot_data = data.query("id==@id").sort_values('date')
    _ = plot_data.plot(x='O',y='G', ax=ax)

那几乎可以让你到处都是。 pandas可视化文档here有很多其他非常有用的选项可以快速浏览数据,但是如果你对图的外观很挑剔那么你会想要直接matplotlib用于数字和轴布局。