Bir DataFrame dizini veya sütun NumPy dizi veya python listesi olarak almak nasıl biliyor musunuz?
Bir DataFrame dizini veya sütun NumPy dizi veya python listesi olarak almak nasıl biliyor musunuz?
Yanıtlar:
NumPy dizisi elde etmek için şu values
özelliği kullanmalısınız :
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)
Bu, verilerin önceden nasıl depolandığına erişir, bu nedenle dönüştürmeye gerek yoktur.
Not: Bu özellik diğer birçok panda nesnesi için de kullanılabilir.
In [3]: df['A'].values
Out[3]: Out[16]: array([1, 2, 3])
Dizini liste olarak almak için şunu arayın tolist
:
In [4]: df.index.tolist()
Out[4]: ['a', 'b', 'c']
Ve benzer şekilde, sütunlar için.
.values
kullanımdan kaldırılmıştır, .to_numpy()
NumPy dizisi istiyorsanız önerilen değiştirmedir. Genişleyebilir misiniz? Verilerin zaten nasıl depolandığına erişir, bu nedenle dönüştürmeye gerek yoktur ?
Sen kullanabilirsiniz df.index
kullanarak bir liste halinde değerlere endeks nesneye erişmek ve daha sonra almak için df.index.tolist()
. Benzer şekilde df['col'].tolist()
Seri için de kullanabilirsiniz .
df.index.values.tolist()
df.index.tolist()
bir örnek yöntemi döndürmez. Bir indeks listesi döndürür. Panda indeksinde tanımlanan bir yöntemdir. İlk olarak değerleri çağırmak bir olasılık olsa da, işi numpy'ye devretmek bir düzeltme değildir - sadece bir alternatif.
.values
bu yöntemler lehine kaldırın !İtibaren v0.24.0, biz iki markanın şaplak yeni, tercih dan NumPy diziler elde etme yöntemlerini olacak Index
, Series
ve DataFrame
nesneleri: olduklarını to_numpy()
ve .array
. Kullanımla ilgili olarak dokümanlar şunları belirtiyor:
Biz kaldırılamaz veya kullanım dışı değil
Series.values
yaDataFrame.values
, ama biz çok tavsiye ve kullanma.array
ya da.to_numpy()
onun yerine.
Daha fazla bilgi için v0.24.0 sürüm notlarının bu bölümüne bakın .
df.index.to_numpy()
# array(['a', 'b'], dtype=object)
df['A'].to_numpy()
# array([1, 4])
Varsayılan olarak bir görünüm döndürülür. Yapılan değişiklikler orijinal belgeyi etkiler.
v = df.index.to_numpy()
v[0] = -1
df
A B
-1 1 2
b 4 5
Bunun yerine bir kopyasına ihtiyacınız varsa to_numpy(copy=True
) kullanın ;
v = df.index.to_numpy(copy=True)
v[-1] = -123
df
A B
a 1 2
b 4 5
Bu işlevin DataFrames için de çalıştığını unutmayın (ancak .array
çalışmaz).
array
Öznitelik
Bu öznitelikExtensionArray
, Dizin / Serileri destekleyenbirnesnedöndürür.
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
Buradan aşağıdakileri kullanarak bir liste almak mümkündür list
:
list(df.index.array)
# ['a', 'b']
list(df['A'].array)
# [1, 4]
veya doğrudan arayın .tolist()
:
df.index.tolist()
# ['a', 'b']
df['A'].tolist()
# [1, 4]
Neler iade edildiğine dair dokümanlar,
İçin
Series
veIndex
normal bir NumPy diziler tarafından desteklenen es,Series.array
yeni dönecektirarrays.PandasArray
bir etrafında ince (no-kopya) sarıcı olannumpy.ndarray
.arrays.PandasArray
özellikle kendi başına yararlı değildir, ancak pandalarda veya üçüncü taraf bir kütüphane tarafından tanımlanan herhangi bir uzantı dizisiyle aynı arabirimi sağlar.
Özetlemek gerekirse, .array
ya dönecektir
ExtensionArray
Endeksin / Dizinin mevcut desteğini veyaExtensionArray
, temel dizi üzerinde ince bir paket olarak yeni bir nesne oluşturulur.İKİ yeni yöntem eklemek için gerekçe
Bu işlevler, iki GitHub sorunu GH19954 ve GH23623 altında yapılan tartışmalar sonucunda eklenmiştir .
Özellikle, dokümanlar gerekçeden bahseder:
[...]
.values
döndürülen değerin gerçek dizi mi, bir miktar dönüşümü mü yoksa pandalar özel dizilerinden biri mi olacağı belli değildiCategorical
. Örneğin, ilePeriodIndex
,.values
yeni bir oluştururndarray
süresinin her zaman nesneleri. [...]
Bu iki işlev, doğru yönde atılmış önemli bir adım olan API'nın tutarlılığını artırmayı amaçlamaktadır.
Son olarak, .values
mevcut sürümde kullanımdan kaldırılmayacak, ancak bunun gelecekte bir noktada gerçekleşmesini bekliyorum, bu yüzden kullanıcıları mümkün olan en kısa sürede yeni API'ya geçiş yapmaya teşvik ediyorum.
Panda v0.13'ten beri şunları da kullanabilirsiniz get_values
:
df.index.get_values()
get_values
sadece arar .values
. Yazmak daha fazla karakter.
Ben pandaların dönüştürülen dataframe
için list
ve daha sonra temel kullanılır list.index()
. Bunun gibi bir şey:
dd = list(zone[0]) #Where zone[0] is some specific column of the table
idx = dd.index(filename[i])
Olarak dizin değeriniz var idx
.
Bunu yapmanın daha yeni bir yolu .to_numpy () işlevini kullanmaktır.
Bir sütun 'fiyat' ile bir veri çerçevesi varsa, aşağıdaki gibi dönüştürebilirsiniz:
priceArray = df['price'].to_numpy()
Ayrıca, kayan nokta veya nesne gibi veri türünü işlevin bağımsız değişkeni olarak da iletebilirsiniz.
Aşağıda, veri çerçevesi sütununu numpy dizisine dönüştürmenin basit bir yoludur.
df = pd.DataFrame(somedict)
ytrain = df['label']
ytrain_numpy = np.array([x for x in ytrain['label']])
ytrain_numpy bir numpy dizisidir.
Ben denedim to.numpy()
ama bana aşağıdaki hatayı verdi:
TypeError: Doğrusal SVC kullanarak İkili Alaka sınıflandırma yaparken tipler için desteklenen dönüşüm: (dtype ('O'),) . to.numpy (), dataFrame öğesini numpy dizisine dönüştürüyordu, ancak yukarıdaki hatanın gözlemlendiği için iç öğenin veri türü listelendi.
to_numpy
.