2

テキストファイルから大量のデータ配列を抽出し、ループを使用numpy.loadtxtして、次のように異なる列を異なる辞書キーに入れています。

f = numpy.loadtxt(datafile, skiprows=5) # Open and read in the file, skipping to the data
d = {} # Create empty dictionary

for x in range(0, f.shape[1]):
    d[x] = f[:,x]     # Loop through the columns of the datafile, putting each one into
#a dictionary index

テキスト ファイルの配列の上の行には、配列内の変数のすべてのタイトルが含まれています。各変数名を取得して、関連する辞書のキー名として配置する方法はありますか? (つまり、列 1 = データ、d[日付] ={14/11/12,15/11/12 .... など)

4

2 に答える 2

5

パンダは良いアイデアなので、レプティリカスの答えに「賛成」してください。

Pandas に依存したくない場合は、この関数numpy.genfromtxtを使用してデータを numpy 構造化配列に直接読み込むことも簡単にできます。構造体配列は、numpy の 1 次元配列と辞書の両方のように機能します。

たとえば、サンプル データ ファイル「data.csv」は次のとおりです。

alpha, beta, gamma
100, 0.5, 19.9
210, 0.25, 21.0
240, 0.45, 15.0
290, 0.75, 5.5

次のように、これを構造化配列に読み取ることができます。

>>> data = genfromtxt('data.csv', delimiter=',', names=True, dtype=None)

このオプションnames=Truegenfromtxt、列見出しを構造化配列のフィールド名として使用するように指示します。設定dtype=Noneは、列のデータ型を自動的に把握するように指示genfromtxtします (デフォルトでは、すべての値が倍精度浮動小数点値に変換されます)。

dataこのように見えます。

>>> data
array([(100, 0.5, 19.9), (210, 0.25, 21.0), (240, 0.45, 15.0),
       (290, 0.75, 5.5)], 
      dtype=[('alpha', '<i4'), ('beta', '<f8'), ('gamma', '<f8')])

個々の要素にアクセスできます (それぞれが 3 つのフィールドを含む構造体です)。

>>> data[0]
(100, 0.5, 19.9)

または、辞書のようなインターフェイスを使用して列にアクセスできます。

>>> data['beta']
array([ 0.5 ,  0.25,  0.45,  0.75])

そして、それらを組み合わせることができます:

>>> data['beta'][1]
0.25
>>> data[1]['beta']
0.25
于 2012-10-15T17:35:22.463 に答える
3

ここで優れた Pandas ライブラリを使用したいようです。自分で探していることは確かに実行できますが、Pandas には優れた I/O ルーチンがいくつか用意されており、多くの日時機能も組み込まれています。例えば:

In [747]: print open('foo.csv').read()
date,A,B,C
20090101,a,1,2
20090102,b,3,4
20090103,c,4,5

In [748]: data = read_csv('foo.csv')
Out[748]:
   date  A  B  C
0  20090101  a  1  2
1  20090102  b  3  4
2  20090103  c  4  5

これにより、Numpy のレコード配列に似たデータ フレームが作成されます。data['date']、data['A'] などを使用して、必要に応じて列にアクセスできます。

詳細はこちらこちら

于 2012-10-15T14:47:40.727 に答える