Python Pandas - Verileri Dizine Ekleme ve Seçme
Bu bölümde, tarihin nasıl dilimlenip bölüneceğini ve genel olarak pandas nesnesinin alt kümesini nasıl alacağımızı tartışacağız.
Python ve NumPy indeksleme operatörleri "[]" ve öznitelik operatörü "." çok çeşitli kullanım durumlarında Pandalar veri yapılarına hızlı ve kolay erişim sağlar. Bununla birlikte, erişilecek verilerin türü önceden bilinmediğinden, doğrudan standart operatörlerin kullanılması bazı optimizasyon sınırlarına sahiptir. Üretim kodu için, bu bölümde açıklanan optimize edilmiş pandalar veri erişim yöntemlerinden yararlanmanızı öneririz.
Pandalar artık üç tür Çok eksenli indekslemeyi destekliyor; üç tür aşağıdaki tabloda belirtilmiştir -
Sr.No | Endeksleme ve Açıklama |
---|---|
1 | .loc() Etikete dayalı |
2 | .iloc() Tam sayıya dayalı |
3 | .ix() Hem Etiket hem de Tamsayı tabanlı |
.loc ()
Pandalar, yalnızca sahip olmak için çeşitli yöntemler sağlar. label based indexing. Dilimleme sırasında başlangıç sınırı da dahil edilir. Tam sayılar geçerli etiketlerdir, ancak konumu değil etikete atıfta bulunurlar.
.loc() birden çok erişim yöntemine sahiptir -
- Tek bir skaler etiket
- Etiket listesi
- Bir dilim nesnesi
- Bir Boole dizisi
loc',' ile ayrılmış iki tek / liste / aralık operatörünü alır. İlki satırı, ikincisi sütunları gösterir.
örnek 1
#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
#select all rows for a specific column
print df.loc[:,'A']
Onun output aşağıdaki gibidir -
a 0.391548
b -0.070649
c -0.317212
d -2.162406
e 2.202797
f 0.613709
g 1.050559
h 1.122680
Name: A, dtype: float64
Örnek 2
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
# Select all rows for multiple columns, say list[]
print df.loc[:,['A','C']]
Onun output aşağıdaki gibidir -
A C
a 0.391548 0.745623
b -0.070649 1.620406
c -0.317212 1.448365
d -2.162406 -0.873557
e 2.202797 0.528067
f 0.613709 0.286414
g 1.050559 0.216526
h 1.122680 -1.621420
Örnek 3
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
# Select few rows for multiple columns, say list[]
print df.loc[['a','b','f','h'],['A','C']]
Onun output aşağıdaki gibidir -
A C
a 0.391548 0.745623
b -0.070649 1.620406
f 0.613709 0.286414
h 1.122680 -1.621420
Örnek 4
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
# Select range of rows for all columns
print df.loc['a':'h']
Onun output aşağıdaki gibidir -
A B C D
a 0.391548 -0.224297 0.745623 0.054301
b -0.070649 -0.880130 1.620406 1.419743
c -0.317212 -1.929698 1.448365 0.616899
d -2.162406 0.614256 -0.873557 1.093958
e 2.202797 -2.315915 0.528067 0.612482
f 0.613709 -0.157674 0.286414 -0.500517
g 1.050559 -2.272099 0.216526 0.928449
h 1.122680 0.324368 -1.621420 -0.741470
Örnek 5
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
# for getting values with a boolean array
print df.loc['a']>0
Onun output aşağıdaki gibidir -
A False
B True
C False
D False
Name: a, dtype: bool
.iloc ()
Pandalar, tamamen tamsayı tabanlı indeksleme elde etmek için çeşitli yöntemler sağlar. Python ve numpy gibi, bunlar0-based indeksleme.
Çeşitli erişim yöntemleri aşağıdaki gibidir -
- Bir tam sayı
- Tam sayıların listesi
- Bir dizi değer
örnek 1
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# select all rows for a specific column
print df.iloc[:4]
Onun output aşağıdaki gibidir -
A B C D
0 0.699435 0.256239 -1.270702 -0.645195
1 -0.685354 0.890791 -0.813012 0.631615
2 -0.783192 -0.531378 0.025070 0.230806
3 0.539042 -1.284314 0.826977 -0.026251
Örnek 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Integer slicing
print df.iloc[:4]
print df.iloc[1:5, 2:4]
Onun output aşağıdaki gibidir -
A B C D
0 0.699435 0.256239 -1.270702 -0.645195
1 -0.685354 0.890791 -0.813012 0.631615
2 -0.783192 -0.531378 0.025070 0.230806
3 0.539042 -1.284314 0.826977 -0.026251
C D
1 -0.813012 0.631615
2 0.025070 0.230806
3 0.826977 -0.026251
4 1.423332 1.130568
Örnek 3
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Slicing through list of values
print df.iloc[[1, 3, 5], [1, 3]]
print df.iloc[1:3, :]
print df.iloc[:,1:3]
Onun output aşağıdaki gibidir -
B D
1 0.890791 0.631615
3 -1.284314 -0.026251
5 -0.512888 -0.518930
A B C D
1 -0.685354 0.890791 -0.813012 0.631615
2 -0.783192 -0.531378 0.025070 0.230806
B C
0 0.256239 -1.270702
1 0.890791 -0.813012
2 -0.531378 0.025070
3 -1.284314 0.826977
4 -0.460729 1.423332
5 -0.512888 0.581409
6 -1.204853 0.098060
7 -0.947857 0.641358
.ix ()
Saf etiket tabanlı ve tamsayı tabanlı olmanın yanı sıra, Pandalar .ix () operatörünü kullanarak nesnenin seçilmesi ve alt kümelenmesi için karma bir yöntem sağlar.
örnek 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Integer slicing
print df.ix[:4]
Onun output aşağıdaki gibidir -
A B C D
0 0.699435 0.256239 -1.270702 -0.645195
1 -0.685354 0.890791 -0.813012 0.631615
2 -0.783192 -0.531378 0.025070 0.230806
3 0.539042 -1.284314 0.826977 -0.026251
Örnek 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Index slicing
print df.ix[:,'A']
Onun output aşağıdaki gibidir -
0 0.699435
1 -0.685354
2 -0.783192
3 0.539042
4 -1.044209
5 -1.415411
6 1.062095
7 0.994204
Name: A, dtype: float64
Notasyonların Kullanımı
Çoklu eksen indeksleme ile Pandas nesnesinden değerler almak aşağıdaki gösterimi kullanır -
Nesne | Dizin oluşturucular | Dönüş Tipi |
---|---|---|
Dizi | s.loc [dizinleyici] | Skaler değer |
Veri çerçevesi | df.loc [row_index, col_index] | Seri nesnesi |
Panel | p.loc [item_index, major_index, minor_index] | p.loc [item_index, major_index, minor_index] |
Note − .iloc() & .ix() aynı indeksleme seçeneklerini ve Dönüş değerini uygular.
Şimdi DataFrame nesnesinde her işlemin nasıl gerçekleştirilebileceğini görelim. Temel indeksleme operatörünü '[]' kullanacağız -
örnek 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df['A']
Onun output aşağıdaki gibidir -
0 -0.478893
1 0.391931
2 0.336825
3 -1.055102
4 -0.165218
5 -0.328641
6 0.567721
7 -0.759399
Name: A, dtype: float64
Note - Bu sütunları seçmek için [] 'e bir değer listesi geçirebiliriz.
Örnek 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df[['A','B']]
Onun output aşağıdaki gibidir -
A B
0 -0.478893 -0.606311
1 0.391931 -0.949025
2 0.336825 0.093717
3 -1.055102 -0.012944
4 -0.165218 1.550310
5 -0.328641 -0.226363
6 0.567721 -0.312585
7 -0.759399 -0.372696
Örnek 3
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df[2:2]
Onun output aşağıdaki gibidir -
Columns: [A, B, C, D]
Index: []
Öznitelik Erişimi
Sütunlar, öznitelik operatörü '.' Kullanılarak seçilebilir.
Misal
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df.A
Onun output aşağıdaki gibidir -
0 -0.478893
1 0.391931
2 0.336825
3 -1.055102
4 -0.165218
5 -0.328641
6 0.567721
7 -0.759399
Name: A, dtype: float64