2015-10-20 20 views
20

私はパンダの方がやや新しいです。私は1行23列のパンダのデータフレームを持っています。パンダのデータフレームをシリーズに変換する

これをシリーズに変換しますか?私はこれを行う最もpythonicな方法は何ですか?

私はpd.Series(myResults)を試しましたが、ValueError: cannot copy sequence with size 23 to array axis with dimension 1と苦情を言います。それは数学的にはまだ "ベクトル"であることを認識するほどスマートではありません。

ありがとうございます!

答えて

15

まだ数学的には "ベクトル"であることは分かりません。

次元性の違いを認識するのに十分なほどスマートだと言ってください。 :-)

は、私はあなたがすることができる最も簡単な事はあなたに値として、新たな指標として、列と値を持つシリーズを与える位置 ilocを使用してその行を、選択していると思う:

>>> df = pd.DataFrame([list(range(5))], columns=["a{}".format(i) for i in range(5)]) 
>>> df 
    a0 a1 a2 a3 a4 
0 0 1 2 3 4 
>>> df.iloc[0] 
a0 0 
a1 1 
a2 2 
a3 3 
a4 4 
Name: 0, dtype: int64 
>>> type(_) 
<class 'pandas.core.series.Series'> 
+0

あるいは、別の方法: 'df.T' – ako

+4

@ako:' df.T'は、しかし、ちょうど転置データフレームをシリーズを生成しません。 – DSM

+1

良い点。 OPはシリーズを求めた。 – ako

7

ますこれらの2つの方法のいずれかを使用して、データフレームをスライスを介して直列に取り出すことができます。

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iloc.html http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html

import pandas as pd 
import numpy as np 
df = pd.DataFrame(data=np.random.randn(1,8)) 

series1=df.iloc[0,:] 
type(series1) 
pandas.core.series.Series 
17

1行のデータフレーム(結果としてデータフレームになります)を転置してから、結果をsqueezeに変換して、逆数(to_frameの逆数)にすることができます。

df = pd.DataFrame([list(range(5))], columns=["a{}".format(i) for i in range(5)]) 

>>> df.T.squeeze() 
a0 0 
a1 1 
a2 2 
a3 3 
a4 4 
Name: 0, dtype: int64 
+4

「squeeze」を使って小さな問題に遭遇しました。形状 '(1,1) 'のデータフレームに対しては、長さ1の系列ではなく、numpyスカラーが返されます。これは、長さが不明なオブジェクトに対して 'squeeze'を使用すると(例えば、' groupby'で)、捕まえにくいバグにつながりました。 – IanS

+1

"ありがとうございます!df.iloc [:、0]&df.ix [:、0]が両方ともインデックスを生成したときにdf.squeeze() – Afflatus

関連する問題