3

genfromtxtを使用して、タブで区切られた単純なテキストファイルをインポートしようとしています。各列ヘッダー名と、その名前に関連付けられている列のデータにアクセスする必要があります。現在、私はこれをちょっと奇妙に思える方法で達成しています。ヘッダーを含むtxtファイルのすべての値は10進数です。

sample input file:

1     2     3     4      # header row
1.2   5.3   2.8   9.5
3.1   4.5   1.1   6.7
1.2   5.3   2.8   9.5
3.1   4.5   1.1   6.7
1.2   5.3   2.8   9.5
3.1   4.5   1.1   6.7


table_data = np.genfromtxt(file_path)       #import file as numpy array
header_values = table_data[0,:]             # grab first row
table_values = np.delete(table_data,0,0)    # grab everything else

データのテキストファイルをインポートするためのより適切な方法が必要であることを私は知っています。各列のヘッダーとそのヘッダー値に関連するそれぞれのデータに簡単にアクセスできるようにする必要があります。私はあなたが提供できるどんな助けにも感謝します。

明確化:

table_values [header_of_first_column]の行に沿って何かを使用して、データの列にアクセスできるようにしたい。どうすればこれを達成できますか?

4

1 に答える 1

5

names パラメータを使用して、最初の有効な行を列名として使用します。

data = np.genfromtxt(
    fname,
    names = True, #  If `names` is True, the field names are read from the first valid line
    comments = '#', # Skip characters after #
    delimiter = '\t', # tab separated values
    dtype = None)  # guess the dtype of each column

たとえば、投稿したデータを本当にタブ区切りになるように変更すると、次のコードが機能します。

import numpy as np
import os
fname = os.path.expanduser('~/test/data')
data = np.genfromtxt(
    fname,
    names = True, #  If `names` is True, the field names are read from the first valid line
    comments = '#', # Skip characters after #
    delimiter = '\t', # tab separated values
    dtype = None)  # guess the dtype of each column
print(data)
# [(1.2, 5.3, 2.8, 9.5) (3.1, 4.5, 1.1, 6.7) (1.2, 5.3, 2.8, 9.5)
#  (3.1, 4.5, 1.1, 6.7) (1.2, 5.3, 2.8, 9.5) (3.1, 4.5, 1.1, 6.7)]

print(data['1'])
# [ 1.2  3.1  1.2  3.1  1.2  3.1]
于 2012-11-23T02:49:01.170 に答える