次のような形式のCSVファイルがあります。
somefeature,anotherfeature,f3,f4,f5,f6,f7,lastfeature
0,0,0,1,1,2,4,5
そして、私はそれをpandasシリーズ(pandasの毎日のスナップショットPython 2.7を使用)として使用します)としてそれを読み込もうとしました。以下:
import pandas as pd
types = pd.Series.from_csv('csvfile.txt', index_col=False, header=0)
そして:
types = pd.read_csv('csvfile.txt', index_col=False, header=0, squeeze=True)
しかし、どちらも機能しません。最初の結果はランダムな結果を与え、2番目はスクイーズせずにDataFrameをインポートします。
pandasは、次のようにフォーマットされたCSVをシリーズとしてのみ認識できるようです:
f1, value
f2, value2
f3, value3
しかし、機能キーが列ではなく最初の行にある場合、pandasはそれを絞りたくありません。
他に試すことができるものはありますか?この動作は意図されたものですか?
これが私が見つけた方法です:
df = pandas.read_csv('csvfile.txt', index_col=False, header=0);
serie = df.ix[0,:]
Squeezeはすでにこれを実行しているはずなので、私には少しばかげているようです。これはバグですか、それとも何か不足していますか?
/編集:それを行うための最良の方法:
df = pandas.read_csv('csvfile.txt', index_col=False, header=0);
serie = df.transpose()[0] # here we convert the DataFrame into a Serie
これは、行指向のCSV行をpandas Seriesに入れるための最も安定した方法です。
ところで、squeeze = True引数は今のところ無意味です。今日(2013年4月)の時点では、行指向のCSVファイルでしか機能しないためです。公式ドキュメントを参照してください。
http://pandas.pydata.org/pandas-docs/dev/io.html#returning-series
In [28]: df = pd.read_csv('csvfile.csv')
In [29]: df.ix[0]
Out[29]:
somefeature 0
anotherfeature 0
f3 0
f4 1
f5 1
f6 2
f7 4
lastfeature 5
Name: 0, dtype: int64
ds = pandas.read_csv('csvfile.csv', index_col=False, header=0);
X = ds.iloc[:, :10] #ix deprecated