2013-05-24 6 views
121

मैं एक शर्त है कि अपने डेटा फ्रेम से ठीक एक पंक्ति को निकालने का निर्माण किया है:डेटाफ्रेम के सेल से मूल्य कैसे प्राप्त करें?

d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)] 

अब मैं किसी खास कॉलम में से एक मान लेना चाहते हैं:

val = d2['col_name'] 

लेकिन एक परिणाम के रूप में मैं मिल एक डेटा फ्रेम जिसमें एक पंक्ति और एक कॉलम होता है (यानी एक सेल)। यह मेरी जरूरत नहीं है। मुझे एक मूल्य की आवश्यकता है (एक फ्लोट नंबर)। मैं इसे पांडा में कैसे कर सकता हूं?

उत्तर

144

आप केवल एक पंक्ति के साथ एक DataFrame है, तो एक श्रृंखला iloc का उपयोग कर के रूप में पहली (केवल) पंक्ति का उपयोग करें, और तब स्तंभ नाम का उपयोग मूल्य:

In [3]: sub_df 
Out[3]: 
      A   B 
2 -0.133653 -0.030854 

In [4]: sub_df.iloc[0] 
Out[4]: 
A -0.133653 
B -0.030854 
Name: 2, dtype: float64 

In [5]: sub_df.iloc[0]['A'] 
Out[5]: -0.13365288513107493 
+22

धन्यवाद! उत्तर के लिए - क्या किसी और को यह तथ्य पता चलता है कि यह सिर्फ हास्यास्पद से परे समाधान है? – Sophologist

+0

@ सोफोलॉजिस्ट इसे देखकर, मुझे नहीं पता। सवाल थोड़ा अजीब शब्द है, लेकिन यह पढ़ता है कि पहली छमाही बाद के लिए असंभव है। ('at' वास्तव में एक अच्छा जवाब है, हालांकि मुझे यह अजीब लगता है कि यह' ix' जैसा है :)) –

+1

@ सोफोलॉजिस्ट मैं मानता हूं कि यह हास्यास्पद है कि इसकी आवश्यकता है। जब आप सशर्त इनलाइन पास करने का प्रयास करते हैं तो यह भी काम नहीं करता है; 'my_df.loc [my_df ['Col1'] == foo] ['Col2'] 'अभी भी' ' – user5359531

74

ये scalars के लिए तेजी से पहुँच रहे हैं

In [15]: df = pandas.DataFrame(numpy.random.randn(5,3),columns=list('ABC')) 

In [16]: df 
Out[16]: 
      A   B   C 
0 -0.074172 -0.090626 0.038272 
1 -0.128545 0.762088 -0.714816 
2 0.201498 -0.734963 0.558397 
3 1.563307 -1.186415 0.848246 
4 0.205171 0.962514 0.037709 

In [17]: df.iat[0,0] 
Out[17]: -0.074171888537611502 

In [18]: df.at[0,'A'] 
Out[18]: -0.074171888537611502 
+0

मुझे यह जवाब बहुत पसंद है। लेकिन जबकि आप '.iloc [-1] ['ए'] कर सकते हैं, 'आप अंतिम पंक्ति प्रविष्टि – hartmut

6

यह पांडा 10,1/13,1

मैं 10.1 से 13.1 करने के लिए उन्नत करने के बाद परिवर्तन की तरह लग रहा से पहले iloc उपलब्ध नहीं है।

अब 13.1, iloc[0]['label'] के साथ एक स्केलर की बजाय एक एकल मान सरणी प्राप्त होती है।

इस तरह

:

lastprice=stock.iloc[-1]['Close'] 

आउटपुट:

date 
2014-02-26 118.2 
name:Close, dtype: float64 
+0

प्राप्त करने के लिए' -1, 'ए'] पर नहीं कर सकते हैं, मुझे लगता है कि यह केवल सीरीज के लिए मामला होना चाहिए डुप्लिकेट प्रविष्टियां ... वास्तव में, मुझे यह नहीं दिखाई देता है, क्या आप इसे प्रदर्शित करने के लिए एक छोटा सा उदाहरण दे सकते हैं? –

+0

मैंने पैंडस 13.x का उपयोग किया, दोनों iloc [] [] या iloc [,] एक स्केलर आउटपुट। केवल इलोक नकारात्मक सूचकांक के साथ काम नहीं कर रहा है, जैसे -1 – timeislove

+0

यदि आप खिलौना उदाहरण दे सकते हैं तो इसका जवाब यह वास्तव में उपयोगी होगा! –

1

पांडा 0.10, जहां iloc unavalable है के लिए, एक DF को फ़िल्टर और स्तंभ VALUE के लिए पहली पंक्ति डेटा प्राप्त:

df_filt = df[df['C1'] == C1val & df['C2'] == C2val] 
result = df_filt.get_value(df_filt.index[0],'VALUE') 

यदि वहां 1 पंक्ति फ़िल्टर किया गया है, तो प्राप्त करें पहली पंक्ति मान ऐन। फ़िल्टर डेटा खाली डेटा फ्रेम में परिणाम अपवाद होगा।

+1

'get_value' अब बहिष्कृत है (v0.21.0 आरसी 1 (13 अक्टूबर, 2017)) [संदर्भ यहां है] (https://pandas-docs.github.io/pandas-docs-travis/whatsnew.html#deprecations)' .get_value और .set_value श्रृंखला, डेटाफ्रेम, पैनल, स्पैरसेरीज़, और स्पैरसेटाफ्रेम को .iat [] या .at [] एक्सेसर्स (जीएच 1526 9) ' –

2

यह सुनिश्चित नहीं है कि यह एक अच्छा अभ्यास है, लेकिन मैंने देखा कि मैं श्रृंखला को float के रूप में कास्ट करके भी मूल्य प्राप्त कर सकता हूं।

उदा।

rate 

3 0,042679

नाम: Unemployment_rate, dtype: float64

float(rate) 

0,0426789

2

तेज/सबसे आसान विकल्प मैं हा पाए गए निम्नलिखित हैं। 501 पंक्ति सूचकांक का प्रतिनिधित्व करता है।

df.at[501,'column_name'] 
df.get_value(501,'column_name') 
+1

'get_value' का उपयोग करने के पक्ष में बहिष्कृत किया गया है अब हटा दिया गया है (v0.21.0 आरसी 1 (अक्टूबर 13, 2017)) [संदर्भ यहां है] (https://pandas-docs.github.io/pandas-docs-travis/whatsnew.html#deprecations) '.get_value और .set_value श्रृंखला, डेटाफ्रेम, पैनल, स्पैरसेरीज़, और sparseDataFrame को .iat [] या .at [] एक्सेसर्स (GH15269) का उपयोग करने के पक्ष में बहिष्कृत किया गया है। –

4

अधिकांश जवाब iloc जो स्थिति से चयन के लिए अच्छा है का उपयोग कर रहे हैं।

यदि आपको selection-by-labelloc की आवश्यकता है तो यह अधिक सुविधाजनक होगा।

एक मूल्य स्पष्ट रूप से हो रही है के लिए (बहिष्कृत df.get_value के समतुल्य ('एक', 'ए'))

# this is also equivalent to df1.at['a','A'] 
In [55]: df1.loc['a', 'A'] 
Out[55]: 0.13200317033032932 
संबंधित मुद्दे