14

次のような形式の CSV ファイルがあります。

somefeature,anotherfeature,f3,f4,f5,f6,f7,lastfeature
0,0,0,1,1,2,4,5

そして、それを pandas シリーズとして読み取ろうとしました (Python 2.7 の pandas の毎日のスナップショットを使用)。私は次のことを試しました:

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 をインポートするだけです。

パンダは、次のようにフォーマットされた CSV をシリーズとしてのみ認識できるようです。

f1, value
f2, value2
f3, value3

しかし、機能キーが列ではなく最初の行にある場合、パンダはそれを圧迫したくありません。

他に試せることはありますか?この動作は意図したものですか?

4

6 に答える 6

17

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

df = pandas.read_csv('csvfile.txt', index_col=False, header=0);
serie = df.ix[0,:]

Squeeze はすでにこれを行っているはずなので、私には少しばかげているように思えます。これはバグですか、それとも何か不足していますか?

/EDIT:それを行う最良の方法:

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 シリーズに入れる最も安定した方法です。

ところで、今日 (2013 年 4 月) の時点では、行指向の CSV ファイルでのみ機能するため、squeeze=True 引数は今のところ役に立ちません。公式ドキュメントを参照してください。

http://pandas.pydata.org/pandas-docs/dev/io.html#returning-series

于 2013-04-02T10:08:17.850 に答える
3
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
于 2013-04-02T14:47:33.297 に答える