values
およびの使用を廃止してくださいas_matrix()
!
pandas v0.24.0では、pandasオブジェクトからNumPy配列を取得するための2つの新しいメソッドが導入されました。
to_numpy()
、およびオブジェクトで定義されIndex
、Series,
DataFrame
array
Index
と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_numpy
APIの一貫性を改善することを目指しています。これは正しい方向への主要なステップです。.values
現在のバージョンでは廃止されませんが、これは将来のいずれかの時点で発生する可能性があるため、できるだけ早く新しいAPIに移行することをユーザーにお願いします。
他のソリューションの批評
DataFrame.values
すでに述べたように、一貫性のない動作があります。
DataFrame.get_values()
は単なるラッパーなDataFrame.values
ので、上記のすべてが適用されます。
DataFrame.as_matrix()
は現在非推奨です。使用しないでください!