Πώς να λάβετε μια τιμή από ένα κελί ενός πλαισίου δεδομένων;

Έχω κατασκευάσει μια συνθήκη που εξάγει ακριβώς μια γραμμή από το πλαίσιο δεδομένων μου:

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

Τώρα θα ήθελα να πάρω μια τιμή από μια συγκεκριμένη στήλη:

val = d2['col_name']

Αλλά ως αποτέλεσμα λαμβάνω ένα πλαίσιο δεδομένων που περιέχει μία γραμμή και μία στήλη (δηλαδή ένα κελί). Δεν είναι αυτό που χρειάζομαι. Χρειάζομαι μια τιμή (έναν αριθμό float). Πώς μπορώ να το κάνω αυτό στο pandas;

Λύση

Αν έχετε ένα DataFrame με μία μόνο γραμμή, τότε αποκτήστε πρόσβαση στην πρώτη (μοναδική) γραμμή ως Series χρησιμοποιώντας το 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
Σχόλια (4)

Πρόκειται για γρήγορη πρόσβαση για κλιμάκια

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
Σχόλια (3)

Μοιάζει με αλλαγές μετά το pandas 10.1/13.1

Έκανα αναβάθμιση από 10.1 σε 13.1, πριν το iloc δεν είναι διαθέσιμο.

Τώρα με την 13.1, το iloc[0]['label'] παίρνει έναν πίνακα με μία μόνο τιμή αντί για ένα scalar.

Όπως αυτό:

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

Έξοδος:

date
2014-02-26 118.2
name:Close, dtype: float64
Σχόλια (3)