DataFrameのインデックスまたは列をNumPy配列またはPythonリストとして取得する方法を知っていますか?
DataFrameのインデックスまたは列をNumPy配列またはPythonリストとして取得する方法を知っていますか?
回答:
NumPy配列を取得するには、次のvalues属性を使用する必要があります。
In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c']); df
A B
a 1 4
b 2 5
c 3 6
In [2]: df.index.values
Out[2]: array(['a', 'b', 'c'], dtype=object)
これは、データが既に格納されている方法にアクセスするため、変換の必要はありません。
注:この属性は、他の多くのパンダのオブジェクトでも使用できます。
In [3]: df['A'].values
Out[3]: Out[16]: array([1, 2, 3])
インデックスをリストとして取得するには、次を呼び出しますtolist:
In [4]: df.index.tolist()
Out[4]: ['a', 'b', 'c']
同様に、列についても同様です。
.valuesは非推奨で.to_numpy()あり、NumPy配列が必要な場合に推奨される置き換えです。これを拡張して、データがすでに格納されている方法にアクセスできるので、変換の必要はありませんか?
を使用df.indexしてインデックスオブジェクトにアクセスし、を使用してリストの値を取得できますdf.index.tolist()。同様に、df['col'].tolist()シリーズに使用できます。
df.index.values.tolist()
df.index.tolist()インスタンスメソッドを返しません。インデックスのリストを返します。それはパンダのインデックスで定義されたメソッドです。最初に値を呼び出すことは可能ですが、ジョブをnumpyに委任することは修正ではなく、単なる代替手段です。
.valuesこれらの方法を支持しての使用を非推奨にしてください!以降v0.24.0から、我々は2ブランド真新しい、優先からnumpyのアレイを得るための方法がありますIndex、Seriesと、DataFrameオブジェクトを:彼らはto_numpy()、と.array。使用法に関して、ドキュメントは次のように述べています:
削除または非推奨の
Series.valuesorDataFrame.valuesはありませんが、代わりにまたは を使用することを強くお勧めします。.array.to_numpy()
詳細については、v0.24.0リリースノートのこのセクションを参照してください。
df.index.to_numpy()
# array(['a', 'b'], dtype=object)
df['A'].to_numpy()
# array([1, 4])
デフォルトでは、ビューが返されます。変更を加えると元のファイルに影響します。
v = df.index.to_numpy()
v[0] = -1
df
A B
-1 1 2
b 4 5
代わりにコピーが必要な場合は、to_numpy(copy=True);を使用してください。
v = df.index.to_numpy(copy=True)
v[-1] = -123
df
A B
a 1 2
b 4 5
この関数はDataFrameでも機能することに注意してください(機能し.arrayません)。
array属性
この属性はExtensionArray、インデックス/シリーズを支持するオブジェクトを返します。
pd.__version__
# '0.24.0rc1'
# Setup.
df = pd.DataFrame([[1, 2], [4, 5]], columns=['A', 'B'], index=['a', 'b'])
df
A B
a 1 2
b 4 5
df.index.array
# <PandasArray>
# ['a', 'b']
# Length: 2, dtype: object
df['A'].array
# <PandasArray>
# [1, 4]
# Length: 2, dtype: int64
ここから、以下を使用してリストを取得できますlist。
list(df.index.array)
# ['a', 'b']
list(df['A'].array)
# [1, 4]
または、直接呼び出すだけ.tolist()です:
df.index.tolist()
# ['a', 'b']
df['A'].tolist()
# [1, 4]
返されるものに関して、ドキュメントは言及し、
通常のNumPy配列によってサポートされているため
Series、Indexはの周りの薄い(コピーなしの)ラッパーでSeries.arrayある新しいを返します。それ自体は特に有用ではありませんが、パンダで、またはサードパーティのライブラリで定義されている拡張配列と同じインターフェイスを提供します。arrays.PandasArraynumpy.ndarrayarrays.PandasArray
要約すると、.arrayどちらかが返されます
ExtensionArrayのインデックス/シリーズの裏付け、またはExtensionArrayオブジェクトは、基になる配列の薄いラッパーとして作成されます。
2つの新しいメソッドを追加する根拠これらの関数は、2つのGitHub問題GH19954およびGH23623での議論の結果として追加されました。
具体的には、ドキュメントは根拠に言及しています:
[...]
.values戻り値が実際の配列、それの何らかの変換、またはpandasカスタム配列(などCategorical)のいずれであるかは明確ではありませんでした。たとえば、を 使用するとPeriodIndex、毎回.values新しいndarray期間オブジェクトが生成されます。[...]
これら2つの関数は、正しい方向への主要なステップであるAPIの一貫性を向上させることを目的としています。
最後.valuesに、現在のバージョンでは非推奨になりませんが、これは将来のいずれかの時点で発生する可能性があるため、できるだけ早く新しいAPIに移行することをユーザーにお願いします。
パンダv0.13以降、次も使用できますget_values。
df.index.get_values()
get_values呼び出すだけ.values。入力する文字が多いです。
以下は、データフレーム列をnumpy配列に変換する簡単な方法です。
df = pd.DataFrame(somedict)
ytrain = df['label']
ytrain_numpy = np.array([x for x in ytrain['label']])
ytrain_numpyはnumpy配列です。
試してみましたto.numpy()が、次のエラーが発生しました:
TypeError:タイプのサポートされている変換はありません:(dtype( 'O')、)線形SVCを使用してバイナリ関連性分類を行っています。to.numpy()はdataFrameをnumpy配列に変換していましたが、上記のエラーが発生したため、内部要素のデータ型がリストでした。
to_numpyはありません。