少年、私はあなたのために御馳走を持っていますか。numpy.genfromtxtにはconvertersパラメーターがあり、ファイルの解析時に各列の関数を指定できます。関数にはCSV文字列値が提供されます。その戻り値は、numpy配列の対応する値になります。
さらに、このdtype = Noneパラメーターはgenfromtxt、各列のタイプについてインテリジェントな推測を行うように指示します。特に、数値列は自動的に適切なdtypeにキャストされます。
たとえば、データファイルに次のものが含まれているとします。
2011-06-19 17:29:00.000,72,44,56
それで
import numpy as np
import datetime as DT
def make_date(datestr):
return DT.datetime.strptime(datestr, '%Y-%m-%d %H:%M:%S.%f')
arr = np.genfromtxt(filename, delimiter = ',',
converters = {'Date':make_date},
names = ('Date', 'Stock', 'Action', 'Amount'),
dtype = None)
print(arr)
print(arr.dtype)
収量
(datetime.datetime(2011, 6, 19, 17, 29), 72, 44, 56)
[('Date', '|O4'), ('Stock', '<i4'), ('Action', '<i4'), ('Amount', '<i4')]
実際のcsvファイルにはより多くの列があるため、にさらにアイテムを追加する必要がありますnamesが、それ以外の場合は、例はそのままです。
余分な列をあまり気にしない場合は、次のように綿毛の名前を割り当てることができます。
arr = np.genfromtxt(filename, delimiter=',',
converters={'Date': make_date},
names=('Date', 'Stock', 'Action', 'Amount') +
tuple('col{i}'.format(i=i) for i in range(22)),
dtype = None)
収量
(datetime.datetime(2011, 6, 19, 17, 29), 72, 44, 56, 0.4772, 0.3286, 0.8497, 31.3587, 0.3235, 0.9147, 28.5751, 0.3872, 0.2803, 0, 0.2601, 0.2073, 0.1172, 0, 0.0, 0, 5.8922, 1, 0, 0, 0, 1.2759)
また、上に構築され、CSVの解析をさらに高度なレベルに引き上げるpandasモジュールを確認することもできます。これには、パラメーターが日付文字列を自動的に解析するpandas.read_csv関数があります(dateutilを使用)。numpyparse_dates = True
パンダを使用すると、csvを次のように解析できます
df = pd.read_csv(filename, parse_dates = [0,1], header = None,
names=('Date', 'Stock', 'Action', 'Amount') +
tuple('col{i}'.format(i=i) for i in range(22)))
numpy配列ではなく、make_date関数. Just to be clear --pands.read_csvDataFrameを指定する必要がないことに注意してください。returns aはDataFrame実際にはあなたの目的にとってより有用かもしれませんが、それは利用して探索するためのまったく新しい方法の世界を備えた別のオブジェクトであることに注意する必要があります。