Kullanımınızı kullanımdan kaldırmak values
veas_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 DataFrame
nesneler ve
array
, Index
ve Series
yalnızca nesnelerde tanımlanır .
İçin v0.24 belgelerini ziyaret .values
ederseniz, 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 Index
ve Series
nesneler ü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_records
bunu 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_numpy
Ne 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.fromrecords
biraz 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:
[...] .values
dö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 ndarray
sü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. .values
mevcut 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 !