web-dev-qa-db-ja.com

CSVファイルからpandas Seriesを読み取る方法

次のような形式の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はそれを絞りたくありません。

他に試すことができるものはありますか?この動作は意図されたものですか?

8
gaborous

これが私が見つけた方法です:

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

15
gaborous
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
3
waitingkuo
ds = pandas.read_csv('csvfile.csv', index_col=False, header=0);    
X = ds.iloc[:, :10] #ix deprecated