valuesおよびの使用を廃止してくださいas_matrix()!
pandas v0.24.0では、pandasオブジェクトからNumPy配列を取得するための2つの新しいメソッドが導入されました。
to_numpy()、およびオブジェクトで定義されIndex、Series,DataFrame
arrayIndexとSeriesオブジェクトでのみ定義されます。
のv0.24ドキュメントにアクセスすると.values、次のような大きな赤い警告が表示されます。
警告:DataFrame.to_numpy()代わりに使用することをお勧めします。
詳細については、v0.24.0リリースノートのこのセクションとこの回答をご覧ください。
API全体の一貫性を高めるto_numpyために、DataFrameから基になるNumPy配列を抽出する新しいメソッドが導入されました。
# Setup.
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c'])
df.to_numpy()
array([[1, 4],
[2, 5],
[3, 6]])
上述したように、このメソッドはIndexおよびSeriesオブジェクトでも定義されています(ここを参照)。
df.index.to_numpy()
# array(['a', 'b', 'c'], dtype=object)
df['A'].to_numpy()
# array([1, 2, 3])
デフォルトではビューが返されるため、行われた変更は元のビューに影響します。
v = df.to_numpy()
v[0, 0] = -1
df
A B
a -1 4
b 2 5
c 3 6
代わりにコピーが必要な場合は、to_numpy(copy=True)を使用してください。
ExtensionTypesのパンダ> = 1.0更新
pandas 1.xを使用している場合は、拡張タイプをより多く処理する可能性があります。これらの拡張タイプが正しく変換されるように、もう少し注意する必要があります。
a = pd.array([1, 2, None], dtype="Int64")
a
<IntegerArray>
[1, 2, <NA>]
Length: 3, dtype: Int64
# Wrong
a.to_numpy()
# array([1, 2, <NA>], dtype=object) # yuck, objects
# Right
a.to_numpy(dtype='float', na_value=np.nan)
# array([ 1., 2., nan])
これはドキュメントで呼び出されます。
あなたが必要な場合dtypes...
別の答えに示されているように、DataFrame.to_recordsこれを行うには良い方法です。
df.to_records()
# rec.array([('a', -1, 4), ('b', 2, 5), ('c', 3, 6)],
# dtype=[('index', 'O'), ('A', '<i8'), ('B', '<i8')])
to_numpy残念ながら、これはで行うことはできません。ただし、代わりに次のものを使用できますnp.rec.fromrecords。
v = df.reset_index()
np.rec.fromrecords(v, names=v.columns.tolist())
# rec.array([('a', -1, 4), ('b', 2, 5), ('c', 3, 6)],
# dtype=[('index', '<U1'), ('A', '<i8'), ('B', '<i8')])
パフォーマンスに関しては、ほとんど同じです(実際には、使用rec.fromrecordsは少し高速です)。
df2 = pd.concat([df] * 10000)
%timeit df2.to_records()
%%timeit
v = df2.reset_index()
np.rec.fromrecords(v, names=v.columns.tolist())
11.1 ms ± 557 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
9.67 ms ± 126 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
新しいメソッドを追加する根拠
to_numpy()(に加えてarray)2つのGitHubの問題GH19954とGH23623での議論の結果として追加されました。
具体的には、ドキュメントは根拠に言及しています:
[...] .values戻り値が実際の配列、それの何らかの変換、またはpandasカスタム配列(などCategorical)のいずれであるかは明確ではありませんでした。たとえば、を
使用するとPeriodIndex、毎回.values新しいndarray期間オブジェクトが生成されます。[...]
to_numpyAPIの一貫性を改善することを目指しています。これは正しい方向への主要なステップです。.values現在のバージョンでは廃止されませんが、これは将来のいずれかの時点で発生する可能性があるため、できるだけ早く新しいAPIに移行することをユーザーにお願いします。
他のソリューションの批評
DataFrame.values すでに述べたように、一貫性のない動作があります。
DataFrame.get_values()は単なるラッパーなDataFrame.valuesので、上記のすべてが適用されます。
DataFrame.as_matrix()は現在非推奨です。使用しないでください!