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.values
orDataFrame.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.PandasArray
numpy.ndarray
arrays.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
はありません。