2014-09-26 42 views
5

में तत्व का चयन मैं निम्नलिखित डेटा फ्रेम है:अजगर पांडा: सरणी स्तंभ

pa=pd.DataFrame({'a':np.array([[1.,4.],[2.],[3.,4.,5.]])}) 

मैं स्तंभ 'एक' और उसके बाद ही एक विशेष तत्व का चयन करना चाहते (यानी पहले: 1., 2., 3.)

क्या मैं में जोड़ने के लिए की जरूरत है:

pa.loc[:,['a']] 

?

उत्तर

9

pa.loc[row] लेबल row लेबल के साथ पंक्ति का चयन करता है।

pa.loc[row, col] कोशिकाओं जो row की instersection और col

pa.loc[:, col] का चयन करता है सभी पंक्तियों और स्तंभ col नामित कर रहे हैं का चयन करता है। ध्यान दें कि हालांकि यह काम करता है यह डेटाफ्रेम के कॉलम को संदर्भित करने का मूर्ख तरीका नहीं है। इसके लिए आपको pa['a']

अब आपके कॉलम की कक्षों में सूचियां हैं ताकि आप उन सूचियों के तत्वों तक पहुंचने के लिए vectorized string methods का उपयोग कर सकें। एक पांडा तालिका के एक स्तंभ में एक NumPy सरणी के

pa['a'].str[0] #first value in lists 
pa['a'].str[-1] #last value in lists 
+0

धन्यवाद। अच्छा समाधान – jankos

4

भंडारण पंक्तियों एक गलती हो सकता है क्योंकि कुछ भी इस रूप में डेटा के साथ उपयोगी कर अजीब है जाता है।

import numpy as np 
import pandas as pd 
import operator 

pa = pd.DataFrame({'a':np.array([[1.,4.],[2.],[3.,4.,5.]])}) 
print(pa['a'].map(operator.itemgetter(0))) 
# 0 1 
# 1 2 
# 2 3 
# Name: a, dtype: float64 

या फिर आप एक सूची समझ इस्तेमाल कर सकते हैं:

यहाँ वांछित डेटा पर प्राप्त करने के लिए दो तरीके हैं, जिनमें से न तो बहुत सुंदर है कर रहे हैं

print([item[0] for item in pa['a']]) 
# [1.0, 2.0, 3.0] 

कि इस दूसरी विधि दिखता है इतना आसान संकेत हो सकता है कि सूचियों की एक सूची यहां एक अधिक उपयुक्त डेटा संरचना हो सकती है।


आप एक पांडा तालिका का उपयोग करना चाहते हैं, तो यह अपने आप ही स्तंभ में प्रत्येक मान स्टोर करने के लिए बेहतर हो सकता है:

0 1 2 
0 1 4 NaN 
1 2 NaN NaN 
2 3 4 5 

यह और अधिक स्मृति की आवश्यकता हो सकती है, लेकिन डेटा एक में है फॉर्म जो अधिक उपयोगी हो सकता है।

आप इस तरह इस नए एक में अपने DataFrame परिवर्तित कर सकते हैं:

In [314]: pa = pa['a'].apply(lambda row: pd.Series(row)); pa 
Out[314]: 
    0 1 2 
0 1 4 NaN 
1 2 NaN NaN 
2 3 4 5 

और अब प्रत्येक पंक्ति से पहले मान का चयन आसान है:

In [315]: pa[0] 
Out[315]: 
0 1 
1 2 
2 3 
Name: 0, dtype: float64 

यह भी बहुत अन्य विकल्पों की तुलना में तेजी है :

In [5]: pa2 = pa['a'].apply(lambda row: pd.Series(row)) 

In [6]: %timeit pa2[0] 
100000 loops, best of 3: 1.95 µs per loop 

In [10]: %timeit [item[0] for item in pa['a']] 
100000 loops, best of 3: 14.4 µs per loop 

In [9]: %timeit pa['a'].map(operator.itemgetter(0)) 
10000 loops, best of 3: 44 µs per loop 

In [13]: %timeit pa['a'].str[0] 
10000 loops, best of 3: 67.2 µs per loop 
+0

यह एक बहुत अच्छा जवाब है। डुनो क्यों अभी तक कोई भी ऊपर नहीं उठाया! – Aaron

संबंधित मुद्दे