Kullanımınızı kullanımdan kaldırmak valuesveas_matrix() !
pandas v0.24.0, pandas nesnelerinden NumPy dizileri elde etmek için iki yeni yöntem tanıttı:
to_numpy()Hakkında tanımlandığı Index, Series,ve DataFramenesneler ve
array, Indexve Seriesyalnızca nesnelerde tanımlanır .
İçin v0.24 belgelerini ziyaret .valuesederseniz, büyük bir kırmızı uyarı görürsünüz:
Uyarı: DataFrame.to_numpy()Bunun yerine kullanmanızı öneririz .
Daha fazla bilgi için v0.24.0 sürüm notlarının bu bölümüne ve bu cevaba bakınız .
Daha İyi Tutarlılığa Doğru: to_numpy()
API boyunca daha iyi tutarlılık ruhu içinde to_numpy, temel NumPy dizisini DataFrames'ten ayıklamak için yeni bir yöntem sunulmuştur.
# 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]])
Yukarıda belirtildiği gibi, bu yöntem Indexve Seriesnesneler üzerinde de tanımlanmıştır ( buraya bakın ).
df.index.to_numpy()
# array(['a', 'b', 'c'], dtype=object)
df['A'].to_numpy()
# array([1, 2, 3])
Varsayılan olarak bir görünüm döndürülür, bu nedenle yapılan değişiklikler orijinali etkiler.
v = df.to_numpy()
v[0, 0] = -1
df
A B
a -1 4
b 2 5
c 3 6
Bunun yerine bir kopyasına ihtiyacınız varsa to_numpy(copy=True) kullanın .
pandalar> = 1.0 ExtensionTypes için güncelleme
Panda 1.x kullanıyorsanız, uzantı türleriyle çok daha fazla uğraşma şansınız vardır. Bu uzantı türlerinin doğru dönüştürülmesine biraz daha dikkat etmelisiniz.
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])
Bu dokümanlarda çağrılır .
Eğer ihtiyacınız varsa dtypes...
Başka bir cevapta gösterildiği gibi, DataFrame.to_recordsbunu yapmanın iyi bir yoludur.
df.to_records()
# rec.array([('a', -1, 4), ('b', 2, 5), ('c', 3, 6)],
# dtype=[('index', 'O'), ('A', '<i8'), ('B', '<i8')])
to_numpyNe yazık ki bu yapılamaz . Ancak, alternatif olarak şunları kullanabilirsiniz 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')])
Performans açısından, neredeyse aynı (aslında, kullanmak rec.fromrecordsbiraz daha hızlı).
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)
Yeni Bir Yöntem Ekleme Gerekçesi
to_numpy()(buna ek olarak array) iki GitHub sorunu GH19954 ve GH23623 kapsamında yapılan tartışmalar sonucunda eklendi .
Özellikle, dokümanlar gerekçeden bahseder:
[...] .valuesdöndürülen değerin gerçek dizi mi, bazı dönüşümleri mi yoksa panda özel dizilerinden biri mi (mesela Categorical) olacağı belli değildi . Örneğin, ile PeriodIndex, .values
yeni bir oluşturur ndarraysüresinin her zaman nesneleri. [...]
to_numpy doğru yönde atılmış önemli bir adım olan API'nın tutarlılığını artırmayı amaçlamaktadır. .valuesmevcut sürümde kullanımdan kaldırılmayacak, ancak bunun gelecekte bir noktada gerçekleşmesini bekliyorum.
Diğer Çözümlerin Eleştirisi
DataFrame.values daha önce de belirtildiği gibi tutarsız bir davranışa sahiptir.
DataFrame.get_values() sadece etrafı saran DataFrame.values , bu yüzden yukarıda belirtilen her şey geçerlidir.
DataFrame.as_matrix()şimdi kullanımdan kaldırıldı, KULLANMAYIN !