web-dev-qa-db-ja.com

パンダデータフレームを系列に変換

私はややパンダが初めてです。 1行23列のパンダデータフレームがあります。

これをシリーズに変換したいですか?これを行うための最もPythonicの方法は何だろうか?

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

ありがとうございます。

52
user1357015

数学的にはまだ「ベクトル」であることを認識するのに十分なほどスマートではありません。

むしろ、それが次元の違いを認識するのに十分賢いと言ってください。 :-)

私はあなたができる最も簡単なことは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'>
37
DSM

単一行のデータフレームを転置して(それでもデータフレームが生成されます)、次に squeeze 結果を一連の(to_frameの逆)に変換することができます。

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

>>> df.T.squeeze()  # Or more simply, df.squeeze() for a single row dataframe.
a0    0
a1    1
a2    2
a3    3
a4    4
Name: 0, dtype: int64

注:@IanSによって提起されたポイントに対応するために(OPの問題ではありませんが)、データフレームのサイズをテストします。 dfはデータフレームだと思いますが、Edgeのケースは空のデータフレーム、(1、1)の形状のデータフレーム、そして複数の行を持つデータフレームです。

if df.empty:
    # Empty dataframe, so convert to empty Series.
    result = pd.Series()
Elif df.shape == (1, 1)
    # DataFrame with one value, so convert to series with appropriate index.
    result = pd.Series(df.iat[0, 0], index=df.columns)
Elif len(df) == 1:
    # Convert to series per OP's question.
    result = df.T.squeeze()
else:
    # Dataframe with multiple rows.  Implement desired behavior.
    pass

@themachinistによって提供される答えの線に沿ってこれを単純化することもできます。

if len(df) > 1:
    # Dataframe with multiple rows.  Implement desired behavior.
    pass
else:
    result = pd.Series() if df.empty else df.iloc[0, :]
32
Alexander

次の2つの方法のいずれかを使用してデータフレームをスライスすることで系列を取得できます。

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iloc.htmlhttp://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
23
themachinist

もう一つの方法 -

MyResultが、1列23行の形式でデータを含むdataFrameであるとします。

// label your columns by passing a list of names
myResult.columns = ['firstCol']

// fetch the column in this way, which will return you a series
myResult = myResult['firstCol']

print(type(myResult))

同様に、複数の列を持つデータフレームからシリーズを取得できます。

0
Tauseef Malik