कहें df
एक पांडा डेटाफ्रेम है। इंडेक्सिंग पांडस डेटा फ्रेम: पूर्णांक पंक्तियां, कॉलम नाम
जब पंक्तियों को संदर्भित, df.ix[row_idx, ]
केवल नाम दिया जाना चाहता है:
df.loc[]
केवल केवल पूर्णांकों (वास्तविक प्लेसमेंट)df.ix[]
दोनों के नाम और पूर्णांकों स्वीकार करता है स्वीकार करता है नामdf.iloc[]
स्वीकार करता है। जैसेdf = pd.DataFrame({'a' : ['one', 'two', 'three','four', 'five', 'six'], '1' : np.arange(6)}) df = df.ix[2:6] print(df) 1 a 2 2 three 3 3 four 4 4 five 5 5 six df.ix[0, 'a']
एक त्रुटि फेंकता है, यह 'दो' वापस नहीं देता है।
कॉलम का संदर्भ देते समय, इलोक पूर्णांक पसंद करता है, नाम नहीं। जैसे
df.ix[2, 1]
रिटर्न 'तीन', नहीं 2. (
df.idx[2, '1']
हालांकि वापसी करता2
)।विचित्र रूप से, मुझे सटीक विपरीत कार्यक्षमता चाहिए। आम तौर पर मेरे कॉलम नाम बहुत सार्थक होते हैं, इसलिए मेरे कोड में मैं उन्हें सीधे संदर्भित करता हूं। लेकिन बहुत से अवलोकन की सफाई के कारण, मेरे पांडा डेटा फ्रेम में पंक्ति नाम आमतौर पर
range(len(df))
से मेल नहीं खाते हैं।मुझे पता है मैं उपयोग कर सकते हैं:
df.iloc[0].loc['a'] # returns three
लेकिन यह बदसूरत लगता है! क्या किसी को ऐसा करने का बेहतर तरीका पता है, ताकि कोड इस तरह दिखेगा?
df.foo[0, 'a'] # returns three
वास्तव में,
pandas.core.frame.DataFrame
रों को अपने ही नई विधि पर जोड़ने के लिए है, तो उदाहरण के लिए यह संभव हैdf.idx(rows, cols)
वास्तव मेंdf.iloc[rows].loc[cols]
है?
आप 'df ['a'] का उपयोग कर सकते हैं। Iloc [0]'। – unutbu
यह भी देखें [जीएच 9213] (https://github.com/pydata/pandas/issues/9213#issuecomment-72076683), जो 'df.loc [df.index [0],' a ']' का सुझाव देता है। इसमें [जंजीर अनुक्रमण का उपयोग न करने का लाभ] है (http://pandas.pydata.org/pandas-docs/stable/indexing.html#why-does-the-assignment-when-using-chained-indexing-fail) , जिसका अर्थ यह है कि यह कार्य करते समय काम करेगा, जबकि 'डीएफ [[' ए ',' बी ']]। iloc [0] = val' नहीं होगा। – unutbu
वास्तव में आपकी समस्या का समाधान नहीं करता है लेकिन यहां बहुत अच्छा जवाब है: https://stackoverflow.com/questions/31593201/pandas-iloc-vs-ix-vs-loc-explanation – JohnE