2017-08-10 16 views
0

pandasの.csvからデータを取り出してmatplotlib.pyplotとプロットしました。私のデータの日付/時刻形式は5分ごとですが、毎日1つのデータポイントを作成するために1日以上の時間を統合する必要があります。0またはモジュロでscipy cumtrapz()除算

私はこのエラーを取得しておいてください。

Traceback (most recent call last): 
    File "integrating.py", line 25, in <module> 
    plt.plot(times, integ) 
    File "/usr/local/lib/python3.6/site-packages/matplotlib/pyplot.py", line 3317, in plot 
    ret = ax.plot(*args, **kwargs) 
    File "/usr/local/lib/python3.6/site-packages/matplotlib/__init__.py", line 1898, in inner 
    return func(ax, *args, **kwargs) 
    File "/usr/local/lib/python3.6/site-packages/matplotlib/axes/_axes.py", line 1406, in plot 
    for line in self._get_lines(*args, **kwargs): 
    File "/usr/local/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 407, in _grab_next_args 
    for seg in self._plot_args(remaining, kwargs): 
    File "/usr/local/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 395, in _plot_args 
    seg = func(x[:, j % ncx], y[:, j % ncy], kw, kwargs) 
ZeroDivisionError: integer division or modulo by zero 

私は、下の配列を使用する場合、それは動作しますので、私は、書式設定の問題を疑います。 datasを配列に変換しようとしましたが、さらに追求する価値があるかどうかはわかりません。私はまた、データのこのセクションにゼロが含まれていないことを知っているので、なぜ私にこのことを伝えているのか正確には分かりません。

ご迷惑をおかけして申し訳ありません。私は別の方向を取る必要があっても、実際にそれを働かせたいだけです。ありがとう!

後のCSVから引き出された私のデータの形式は次のとおりです。

 Data 
367     3 
368     4 
369     5 
370     5 
371     6 
372     7 
373     8 
374     8 
375     9 
376     10 

コード:

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 
import scipy 
from scipy import integrate 

file = pd.read_csv("Compiled.csv",parse_dates=['Date/Time']) 
times = file.loc[367:432, ['Date/Time']] 
datas = file.loc[367:432, ['Data']] 

#times = [1,2,3,4,5,6,7,8,9] 
#datas = [1,2,3,4,5,0,3,2,1] 

plt.plot(times, scipy.integrate.cumtrapz(datas, x=None)) 
plt.show() 

ソリューション:動作するはずです何

times = datas['Date/Time'].loc[367:532] 
integ = scipy.integrate.cumtrapz(datas['Data'].loc[366:532].values, x=None) 
plt.plot(times, integ) 
+1

スタックトレースを含む完全なエラーメッセージを投稿してください。 – user2357112

+0

機能の不幸な名前 – JoshuaRLi

+0

一般に、SciPy関数はPandas DataFramesを扱うように設計されていないので、それらの動作は予測できません。 'cumtrapz'に渡す前にデータをnumpy配列に変換してください。配列の形状を確認してください。 'cumtrapz'は多次元配列を受け取り、' axis'引数を使ってどの軸を統合するかを選択します。 –

答えて

0

のように値を指定することですcumtrapz関数への配列

以来
integ = scipy.integrate.cumtrapz(datas['Data'].values, x=None) 

が、その後datas未満の値を持っている、あなたのプロットはまた、これが唯一のtimesは、数値データやdatetimeオブジェクトを含む、それを動作すること

plt.plot(times.loc[1:], scipy.integrate.cumtrapz(datas, x=None)) 

を説明するために必要です。

+0

はい!これは機能します。ありがとうございました!私は '.value'を使っていくつかのバリエーションを試しましたが、ここでどのように構造化されているかについて何かが働いていました。 –