पंडों डेटाफ्रेम से मूल्य कैसे प्राप्त करें और सूचकांक और वस्तु प्रकार नहीं


104

कहो कि मेरे पास निम्नलिखित डेटाफ़्रेम है

पत्र संख्या
ए १
बी २
सी 3
डी 4

जिसे निम्नलिखित कोड के माध्यम से प्राप्त किया जा सकता है

import pandas as pd

letters=pd.Series(('A', 'B', 'C', 'D'))
numbers=pd.Series((1, 2, 3, 4))
keys=('Letters', 'Numbers')
df=pd.concat((letters, numbers), axis=1, keys=keys)

अब मैं स्तंभ पत्र से मान C प्राप्त करना चाहता हूं।

कमांड लाइन

df[df.Letters=='C'].Letters

वापस होगा

2 सी
नाम: अक्षर, dtype: ऑब्जेक्ट

मैं केवल मान C और संपूर्ण दो पंक्ति आउटपुट कैसे प्राप्त कर सकता हूं?


6
एक असंबंधित नोट पर, आपके डेटाफ़्रेम को समाप्‍त करने का एक अच्छा तरीका है:pd.DataFrame({'Letters': letters, 'Numbers': numbers})
जोकॉन्ड्रॉन

जवाबों:


144
df[df.Letters=='C'].Letters.item()

यह इंडेक्स / सीरीज़ में पहले तत्व को उस चयन से लौटाता है। इस मामले में, मान हमेशा पहला तत्व होता है।

संपादित करें:

या आप एक लोकेशन () चला सकते हैं और इस तरह से पहले एलिमेंट को एक्सेस कर सकते हैं। यह छोटा था और जिस तरह से मैंने इसे अतीत में लागू किया है।


2
मुझे यह तरीका बहुत पसंद है, हालाँकि मुझे चेतावनी मिल रही है:FutureWarning: "item" has been deprecated and will be removed in a future version
एलेक्सगॉन

2
@ एलेक्स जी: आप इसके बजाय इसका उपयोग कर सकते हैं df[df.Letters=='C'].Letters.iloc[0]:। यह परिणाम श्रृंखला में पहला तत्व (जो अद्वितीय भी है) पैदा करता है।
आन-थि दिं डे

लोकेशन का उपयोग करते हुए [: 1] अभी भी मूल्य के आगे इंडेक्स दिखाता है :(
सोनिक सोल

@ एलेक्स और @ सोनिक सोल: df[df.Letters=='C'].Letters.squeeze()इसके बजाय उपयोग करने का प्रयास करें । यह उसी तरह काम करता है। :)
user78910

52

valuesमूल्यों को एनपी सरणी के रूप में वापस करने के लिए विशेषता का उपयोग करें और फिर [0]पहले मूल्य प्राप्त करने के लिए उपयोग करें:

In [4]:
df.loc[df.Letters=='C','Letters'].values[0]

Out[4]:
'C'

संपादित करें

मैं व्यक्तिगत रूप से सबस्क्रिप्ट ऑपरेटर्स का उपयोग करके कॉलम एक्सेस करना पसंद करता हूं:

df.loc[df['Letters'] == 'C', 'Letters'].values[0]

यह उन मुद्दों से बचता है जहां स्तंभ नामों में रिक्त स्थान या डैश हो सकते हैं -जिसका अर्थ है कि उपयोग करना .


1
मैं व्यक्तिगत .रूप से स्तंभों तक पहुंचने के लिए उपयोग नहीं करता हूं क्योंकि यह हमेशा उदाहरण के लिए काम नहीं करेगा यदि स्तंभ नाम संख्यात्मक मान से शुरू होता है या स्तंभ नाम में एक स्थान जैसे गैर अल्फा वर्ण हैं तो मैं हमेशा पसंद करता हूंdf['col_name']
एडचम

समझा। यही कारण है कि हर जगह मैं देखता हूं, मैंने हमेशा df['col_name']संकेतन के बजाय अंकन पाया .। एक बार फिर धन्यवाद।
एडुआर्डो

1
यह वास्तव में अयोग्य है, लेकिन आपके चयन में आप डॉट नोटेशन का उपयोग करके कॉलम 'लेटर्स' तक पहुंचते हैं; df.loc [df.Letters == 'सी']। यदि आपके स्तंभ नामों में स्थान हैं, तो आपको संभवतः उन लोगों को बाहर निकालने के लिए कन्वर्टर्स का उपयोग करना चाहिए, जैसे कि आप एक सीएसवी या एक्सेल फ़ाइल से आयात कर रहे हैं।
वैलकन्ट

@ thomas-ato मैं अपना उत्तर अपडेट करूंगा लेकिन मैं एक अतिरिक्त चरण के रूप में कॉलम को
संशोधित करने से असहमत

1
import pandas as pd

dataset = pd.read_csv("data.csv")
values = list(x for x in dataset["column name"])

>>> values[0]
'item_0'

संपादित करें:

वास्तव में, आप किसी पुराने सरणी की तरह ही डेटासेट इंडेक्स कर सकते हैं।

import pandas as pd

dataset = pd.read_csv("data.csv")
first_value = dataset["column name"][0]

>>> print(first_value)
'item_0'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.