pandas                
            डेटा अनुक्रमण और चयन
        
        
            
    खोज…
लेबल द्वारा कॉलम चुनें
# Create a sample DF
df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
# Show DF
df
          A         B         C
0 -0.467542  0.469146 -0.861848
1 -0.823205 -0.167087 -0.759942
2 -1.508202  1.361894 -0.166701
3  0.394143 -0.287349 -0.978102
4 -0.160431  1.054736 -0.785250
# Select column using a single label, 'A'
df['A']
0   -0.467542
1   -0.823205
2   -1.508202
3    0.394143
4   -0.160431
# Select multiple columns using an array of labels, ['A', 'C']
df[['A', 'C']]
          A         C
0 -0.467542 -0.861848
1 -0.823205 -0.759942
2 -1.508202 -0.166701
3  0.394143 -0.978102
4 -0.160431 -0.785250
 अतिरिक्त विवरण यहां हैं: http://pandas.pydata.org/pandas-docs/version/0.18.0/indexing.html#selection-by-label
स्थिति के अनुसार चयन करें
 iloc ( पूर्णांक स्थान के लिए छोटा) विधि उनकी स्थिति सूचकांक के आधार पर iloc की पंक्तियों का चयन करने की अनुमति देती है। इस तरह से कोई डेटाफ्रेम को स्लाइस कर सकता है, जैसे कि पायथन की सूची स्लाइसिंग के साथ करता है। 
df = pd.DataFrame([[11, 22], [33, 44], [55, 66]], index=list("abc"))
df
# Out:
#     0   1
# a  11  22
# b  33  44
# c  55  66
df.iloc[0]  # the 0th index (row)
# Out:
# 0    11
# 1    22
# Name: a, dtype: int64
df.iloc[1]  # the 1st index (row)
# Out:
# 0    33
# 1    44
# Name: b, dtype: int64
df.iloc[:2] # the first 2 rows
#     0   1
# a  11  22
# b  33  44
df[::-1]    # reverse order of rows
#     0   1
# c  55  66
# b  33  44
# a  11  22
 पंक्ति स्थान को स्तंभ स्थान के साथ जोड़ा जा सकता है
df.iloc[:, 1]  # the 1st column
# Out[15]:
# a    22
# b    44
# c    66
# Name: 1, dtype: int64
 इसे भी देखें: स्थिति के अनुसार चयन
लेबल के साथ कटा हुआ
लेबल का उपयोग करते समय, परिणाम में प्रारंभ और रोक दोनों शामिल होते हैं।
import pandas as pd
import numpy as np
np.random.seed(5)
df = pd.DataFrame(np.random.randint(100, size=(5, 5)), columns = list("ABCDE"), 
                  index = ["R" + str(i) for i in range(5)])
# Out: 
#      A   B   C   D   E
# R0  99  78  61  16  73
# R1   8  62  27  30  80
# R2   7  76  15  53  80
# R3  27  44  77  75  65
# R4  47  30  84  86  18
  पंक्तियों R0 से R2 : 
df.loc['R0':'R2']
# Out: 
#      A   B   C   D   E
# R0   9  41  62   1  82
# R1  16  78   5  58   0
# R2  80   4  36  51  27
  सूचना कैसे loc अलग से iloc क्योंकि iloc शामिल नहीं अंत सूचकांक 
df.loc['R0':'R2'] # rows labelled R0, R1, R2
# Out: 
#      A   B   C   D   E
# R0   9  41  62   1  82
# R1  16  78   5  58   0
# R2  80   4  36  51  27
# df.iloc[0:2] # rows indexed by 0, 1
#      A   B   C   D   E
# R0  99  78  61  16  73
# R1   8  62  27  30  80
  कॉलम C से E : 
df.loc[:, 'C':'E']
# Out: 
#      C   D   E
# R0  62   1  82
# R1   5  58   0
# R2  36  51  27
# R3  68  38  83
# R4   7  30  62
        मिश्रित स्थिति और लेबल आधारित चयन
डेटा ढांचा:
import pandas as pd
import numpy as np
np.random.seed(5)
df = pd.DataFrame(np.random.randint(100, size=(5, 5)), columns = list("ABCDE"), 
                  index = ["R" + str(i) for i in range(5)])
df
Out[12]: 
     A   B   C   D   E
R0  99  78  61  16  73
R1   8  62  27  30  80
R2   7  76  15  53  80
R3  27  44  77  75  65
R4  47  30  84  86  18
 स्थिति और पंक्तियों को लेबल द्वारा पंक्तियों का चयन करें:
df.ix[1:3, 'C':'E']
Out[19]: 
     C   D   E
R1   5  58   0
R2  36  51  27
  यदि सूचकांक पूर्णांक है, तो .ix पदों के बजाय लेबल का उपयोग करेगा: 
df.index = np.arange(5, 10)
df
Out[22]: 
    A   B   C   D   E
5   9  41  62   1  82
6  16  78   5  58   0
7  80   4  36  51  27
8  31   2  68  38  83
9  19  18   7  30  62
#same call returns an empty DataFrame because now the index is integer
df.ix[1:3, 'C':'E']
Out[24]: 
Empty DataFrame
Columns: [C, D, E]
Index: []
        बूलियन अनुक्रमण
बूलियन सरणियों का उपयोग करके कोई डेटाफ़्रेम की पंक्तियों और स्तंभों का चयन कर सकता है।
import pandas as pd
import numpy as np
np.random.seed(5)
df = pd.DataFrame(np.random.randint(100, size=(5, 5)), columns = list("ABCDE"), 
                  index = ["R" + str(i) for i in range(5)])
print (df)
#      A   B   C   D   E
# R0  99  78  61  16  73
# R1   8  62  27  30  80
# R2   7  76  15  53  80
# R3  27  44  77  75  65
# R4  47  30  84  86  18
 mask = df['A'] > 10
print (mask)
# R0     True
# R1    False
# R2    False
# R3     True
# R4     True
# Name: A, dtype: bool
print (df[mask])
#      A   B   C   D   E
# R0  99  78  61  16  73
# R3  27  44  77  75  65
# R4  47  30  84  86  18
print (df.ix[mask, 'C'])
# R0    61
# R3    77
# R4    84
# Name: C, dtype: int32
print(df.ix[mask, ['C', 'D']])
#      C   D
# R0  61  16
# R3  77  75
# R4  84  86
 पांडा प्रलेखन में अधिक।
फ़िल्टरिंग कॉलम ("दिलचस्प" का चयन करना, अनावश्यक रूप से छोड़ना, RegEx का उपयोग करना, आदि)
नमूना DF
In [39]: df = pd.DataFrame(np.random.randint(0, 10, size=(5, 6)), columns=['a10','a20','a25','b','c','d'])
In [40]: df
Out[40]:
   a10  a20  a25  b  c  d
0    2    3    7  5  4  7
1    3    1    5  7  2  6
2    7    4    9  0  8  7
3    5    8    8  9  6  8
4    8    1    0  4  4  9
 'a' अक्षर वाले कॉलम दिखाएं
In [41]: df.filter(like='a')
Out[41]:
   a10  a20  a25
0    2    3    7
1    3    1    5
2    7    4    9
3    5    8    8
4    8    1    0
  RegEx फ़िल्टर (b|c|d) - b या c या d का उपयोग करके कॉलम दिखाएं: 
In [42]: df.filter(regex='(b|c|d)')
Out[42]:
   b  c  d
0  5  4  7
1  7  2  6
2  0  8  7
3  9  6  8
4  4  4  9
  उन सभी कॉलमों को छोड़ें जिनकी शुरुआत a साथ हो (दूसरे शब्द में दिए गए सभी कॉलम हटा दें / छोड़ दें। 
In [43]: df.ix[:, ~df.columns.str.contains('^a')]
Out[43]:
   b  c  d
0  5  4  7
1  7  2  6
2  0  8  7
3  9  6  8
4  4  4  9
        `.Query ()` विधि का उपयोग करके पंक्तियों को फ़िल्टर / चयन करना
import pandas as pd
 यादृच्छिक डीएफ उत्पन्न
df = pd.DataFrame(np.random.randint(0,10,size=(10, 3)), columns=list('ABC'))
In [16]: print(df)
   A  B  C
0  4  1  4
1  0  2  0
2  7  8  8
3  2  1  9
4  7  3  8
5  4  0  7
6  1  5  5
7  6  7  8
8  6  7  3
9  6  4  5
  उन पंक्तियों का चयन करें जहाँ कॉलम A > 2 मान और कॉलम B < 5 में मान हैं 
In [18]: df.query('A > 2 and B < 5')
Out[18]:
   A  B  C
0  4  1  4
4  7  3  8
5  4  0  7
9  6  4  5
  .query() फ़िल्टरिंग के लिए चर के साथ .query() विधि का उपयोग करना 
In [23]: B_filter = [1,7]
In [24]: df.query('B == @B_filter')
Out[24]:
   A  B  C
0  4  1  4
3  2  1  9
7  6  7  8
8  6  7  3
In [25]: df.query('@B_filter in B')
Out[25]:
   A  B  C
0  4  1  4
        पथ निर्भर डिप्लिंगिंग
किसी श्रृंखला या डेटाफ़्रेम की पंक्तियों को इस तरह से पार करना आवश्यक हो सकता है कि अगली तत्व या अगली पंक्ति पहले से चयनित तत्व या पंक्ति पर निर्भर हो। इसे पथ निर्भरता कहा जाता है।
 पर विचार करें निम्नलिखित समय श्रृंखला s अनियमित आवृत्ति के साथ। 
#starting python community conventions
import numpy    as np
import pandas   as pd
# n is number of observations
n = 5000
day = pd.to_datetime(['2013-02-06'])
# irregular seconds spanning 28800 seconds (8 hours)
seconds = np.random.rand(n) * 28800 * pd.Timedelta(1, 's')
# start at 8 am
start = pd.offsets.Hour(8)
# irregular timeseries
tidx = day + start + seconds
tidx = tidx.sort_values()
s = pd.Series(np.random.randn(n), tidx, name='A').cumsum()
s.plot();
  चलो एक पथ निर्भर स्थिति मान। श्रृंखला के पहले सदस्य के साथ शुरू करते हुए, मैं प्रत्येक बाद के तत्व को हथियाना चाहता हूं ताकि उस तत्व और वर्तमान तत्व के बीच का पूर्ण अंतर x बराबर या उससे अधिक हो। 
हम अजगर जनरेटर का उपयोग करके इस समस्या को हल करेंगे।
जनरेटर समारोह
def mover(s, move_size=10):
    """Given a reference, find next value with
    an absolute difference >= move_size"""
    ref = None
    for i, v in s.iteritems():
        if ref is None or (abs(ref - v) >= move_size):
            yield i, v
            ref = v
  तब हम एक नई श्रृंखला moves को परिभाषित कर सकते हैं 
moves = pd.Series({i:v for i, v in mover(s, move_size=10)},
                  name='_{}_'.format(s.name))
 उन दोनों को प्लॉट करना
moves.plot(legend=True)
s.plot(legend=True)
 डेटाफ्रेम के लिए एनालॉग होगा:
def mover_df(df, col, move_size=2):
    ref = None
    for i, row in df.iterrows():
        if ref is None or (abs(ref - row.loc[col]) >= move_size):
            yield row
            ref = row.loc[col]
df = s.to_frame()
moves_df = pd.concat(mover_df(df, 'A', 10), axis=1).T
moves_df.A.plot(label='_A_', legend=True)
df.A.plot(legend=True)
         डेटाफ़्रेम की पहली / अंतिम n पंक्तियाँ प्राप्त करें
 किसी डेटाफ़्रेम के पहले या अंतिम कुछ रिकॉर्ड देखने के लिए, आप विधियों का उपयोग कर सकते हैं head और tail 
 पहली n पंक्तियों को वापस करने के लिए DataFrame.head([n]) 
df.head(n)
  अंतिम n पंक्तियों को वापस करने के लिए DataFrame.tail([n]) 
df.tail(n)
 तर्क n के बिना, ये फ़ंक्शन 5 पंक्तियों को वापस करते हैं।
 ध्यान दें कि head / tail लिए स्लाइस अंकन होगा: 
df[:10]  # same as df.head(10)
df[-10:] # same as df.tail(10)
        डेटाफ़्रेम में अलग-अलग पंक्तियों का चयन करें
चलो
df = pd.DataFrame({'col_1':['A','B','A','B','C'], 'col_2':[3,4,3,5,6]})
df
# Output:
#   col_1  col_2
# 0     A      3
# 1     B      4
# 2     A      3
# 3     B      5
# 4     C      6
  col_1 में अलग-अलग मान प्राप्त करने के लिए आप Series.unique() उपयोग कर सकते हैं 
df['col_1'].unique()
# Output:
# array(['A', 'B', 'C'], dtype=object)
 लेकिन Series.unique () केवल एक कॉलम के लिए काम करता है।
 अनोखे col_1 का अनुकरण करने के लिए , SQL का DataFrame.drop_duplicates() आप DataFrame.drop_duplicates() उपयोग कर सकते हैं: 
df.drop_duplicates()
#   col_1  col_2
# 0     A      3
# 1     B      4
# 3     B      5
# 4     C      6
 यह आपको डेटाफ़्रेम में सभी अद्वितीय पंक्तियाँ प्राप्त होगी। तो अगर
df = pd.DataFrame({'col_1':['A','B','A','B','C'], 'col_2':[3,4,3,5,6], 'col_3':[0,0.1,0.2,0.3,0.4]})
df
# Output:
#   col_1  col_2  col_3
# 0     A      3    0.0
# 1     B      4    0.1
# 2     A      3    0.2
# 3     B      5    0.3
# 4     C      6    0.4
df.drop_duplicates()
#   col_1  col_2  col_3
# 0     A      3    0.0
# 1     B      4    0.1
# 2     A      3    0.2
# 3     B      5    0.3
# 4     C      6    0.4
 अद्वितीय रिकॉर्ड का चयन करते समय कॉलम को निर्दिष्ट करने के लिए, उन्हें तर्क के रूप में पास करें
df = pd.DataFrame({'col_1':['A','B','A','B','C'], 'col_2':[3,4,3,5,6], 'col_3':[0,0.1,0.2,0.3,0.4]})
df.drop_duplicates(['col_1','col_2'])
# Output:
#   col_1  col_2  col_3
# 0     A      3    0.0
# 1     B      4    0.1
# 3     B      5    0.3
# 4     C      6    0.4
# skip last column
# df.drop_duplicates(['col_1','col_2'])[['col_1','col_2']]
#   col_1  col_2
# 0     A      3
# 1     B      4
# 3     B      5
# 4     C      6
 स्रोत: पंडों में कई डेटा फ्रेम कॉलम में "अलग-अलग" कैसे चुनें? ।
लापता डेटा (NaN, कोई नहीं, NaT) के साथ पंक्तियों को फ़िल्टर करें
 यदि आपके पास लापता डेटा ( NaN , pd.NaT , None ) के साथ एक pd.NaT तो आप अधूरी पंक्तियों को फ़िल्टर कर सकते हैं 
df = pd.DataFrame([[0,1,2,3],
                  [None,5,None,pd.NaT],
                  [8,None,10,None],
                  [11,12,13,pd.NaT]],columns=list('ABCD'))
df
# Output:    
#     A   B   C     D
# 0   0   1   2     3
# 1 NaN   5 NaN   NaT
# 2   8 NaN  10  None
# 3  11  12  13   NaT
  DataFrame.dropna सभी पंक्तियों को गायब डेटा के साथ कम से कम एक फ़ील्ड से युक्त करता है 
df.dropna()
# Output:
#    A  B  C  D
# 0  0  1  2  3
  उन पंक्तियों को छोड़ने के लिए जो निर्दिष्ट कॉलम में डेटा गायब हैं, subset उपयोग करें 
df.dropna(subset=['C'])
# Output:
#     A   B   C     D
# 0   0   1   2     3
# 2   8 NaN  10  None
# 3  11  12  13   NaT
  फ़िल्टर किए गए फ़्रेम के साथ इन-प्लेस प्रतिस्थापन के लिए विकल्प inplace = True उपयोग करें। 


