csv ファイルに次のような 5000 行のデータがあります。後で各グループのデータをプロットするため、numpy 配列を使用して最後の列 6 (つまり、A、B) でグループ化したいと思います。
Title
Date, Time, Value1, Value2, Value3, Value4, Value5
,, Unit1, Unit2, Unit3,,
2012-04-02,00:00, 85.5333333333333, 4.87666666666667, 8.96, 323.27,A
2012-04-02,00:30, 196.5, 5.49, 8.42, 323.15,B
2012-04-02,01:00, 68.2, 4.47, 7.83, 325.30,A
2012-04-02,01:30, 320.9, 6.77333333333333, 8.05, 326.63,B
np.genfromtxt でデータをロードするときに dtype=None を指定する必要がありました。そうしないと、A 項が NaN になります 最初の列が文字列で残りの列が数値の場合に numpy.genfromtxt を使用するには
ここで言及されている最後の列に基づいてすべての値を返すために itertools groupby を使用しようとしています: How do I use Python's itertools.groupby()? しかし、最初に、numpy 配列をソートする必要があります。
6番目の列をスプライシングし、 Python(Numpy)配列ソート Ieをソートすることにより、高度なインデックス付けを使用しようとしました。v[v[:,0].argsort()]
ただし、これは numpy が私のレコードを私の dtype の 1D 配列 (none に設定されていた) として扱うことに言及しているリンクであり、これをソートしようとして同じインデックス エラーに遭遇しました: Numpy Array Column Slicing Produces IndexError: invalid index例外
質問:
1)列6の文字列値に基づいてgroupbyを使用してnumpy配列を分割し、それらを個別にプロットするにはどうすればよいですか?
2) 1 行目 (タイトル) と 3 行目 (ユニット) をスキップして 2 行目 (列見出し) とデータを残すことができるように、行をスキップできるとよいでしょう。利用可能なオプションを使用して簡単にそれを行う方法を知っている人はいますか?
これは私がこれまでに持っているスクリプトです:
import numpy as np
from matplotlib import pyplot as plt
from itertools import groupby
import csv
regression_data_dp1 = np.genfromtxt(“file.csv”, delimiter=',', skiprows=3, dtype=None)
sortindex = regression_data_dp1[:,6]
#Error is hit at this step:
# sortindex = regression_data_dp1[:,6]
#IndexError: invalid index
regression_data_dp1_sorted = regression_data_dp1[ regression_data_dp1(:,column_WRF_wind_direction).argsort()]
for key, group in groupby(regression_data_dp1, lambda x: x[0]):
print key
with open(“file_" + key.strip() + ".csv", 'w') as data_file:
wr=csv.writer(data_file, quoting=csv.QUOTE_ALL)
for item in (group):
wr.writerow(item)