0

次のファイルの内容から MX2 numpy 行列または配列を作成しようとしています。

shell: head WORLD#America.csv
"2013-04-17 12","3","WORLD","#America"
"2013-04-17 13","9","WORLD","#America"
"2013-04-17 14","4","WORLD","#America"
"2013-04-17 15","3","WORLD","#America"
"2013-04-17 16","7","WORLD","#America"
"2013-04-17 17","8","WORLD","#America"
"2013-04-17 18","6","WORLD","#America"
"2013-04-17 19","6","WORLD","#America"
"2013-04-17 20","6","WORLD","#America"
"2013-04-17 21","2","WORLD","#America"

関数に出くわしましたgenfromtxt()が、データの抽出に失敗しました。というファイルを使用fして、次のことを試しましts = genfromtxt(f, delimiter=",")nan。これは初めての試みだったのでdtype、配列のデータ型を指定するパラメーターに関するドキュメントを読みました。フォームのエントリを含む MX2 マトリックスを取得する(datetime, int)には、次のようにしますdtype=[('f1', datetime64), ('f2', uint)]。これを行ったとき、 variable に次のものが割り当てられましたts

(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L),
(datetime.datetime(1969, 12, 31, 23, 59, 59, 999999), 18446744073709551615L)],
dtype=[('f1', ('<M8[us]', {})), ('f2', '<u8')])

マトリックスに対して取得したすべての値は定数です...なぜファイルから読み取られなかったのですか? 明らかに、これは私が得るべき出力ではありません。

datetimehead コマンドで示されるように、最初の列が で、2 番目の列が整数である目的の MX2 行列または配列を取得するにはどうすればよいですか?

4

1 に答える 1

0

コメントで指摘されているように、このファイルを読む際の難点の 1 つgenfromtxtは、引用符の存在です。(プログラムで) 引用符を削除するのが最善かもしれませんが、この問題を回避することもできます: 区切り文字として引用符を指定します:

np.genfromtxt(filename, delimiter='"', dtype=str, comments=None)[0]
# array(['', '2013-04-17 12', ',', '3', ',', 'WORLD', ',', '#America', ''], 
#       dtype='|S13')

これで、ファイルは 9 列であると解釈され、2 番目と 4 番目の列には目的のデータが含まれます。

もう 1 つの問題は、日時列の dtype を指定することです。最近の (?) バージョンの Numpy では、時刻/日付の単位を指定するかgenfromtxt、エラーをスローする必要があります。この場合、明らかにM8[h]、時間単位を指定するために dtype として使用する必要があります。

全体として、次の方法でファイルをロードできました。

ts = np.genfromtxt(filename, 
                   delimiter='"', 
                   dtype='M8[h], uint', 
                   usecols=[1,3])

または、コンバーターの使用を検討するか、 Pandas の CSV リーダーを試すこともできます。

于 2015-12-29T21:48:15.520 に答える