Come iterare sulle righe in un DataFrame in Pandas?

Ho un DataFrame di pandas:

import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
print df

Output:

   c1   c2
0  10  100
1  11  110
2  12  120

Ora voglio iterare sulle righe di questo frame. Per ogni riga voglio poter accedere ai suoi elementi (valori nelle celle) tramite il nome delle colonne. Per esempio:

for row in df.rows:
   print row['c1'], row['c2']

È possibile farlo in pandas?

Ho trovato questo domanda simile. Ma non mi dà la risposta di cui ho bisogno. Ad esempio, è suggerito lì per usare:

for date, row in df.T.iteritems():

o

for row in df.iterrows():

Ma non capisco cosa sia l'oggetto row e come posso lavorare con esso.

Soluzione

DataFrame.iterrows è un generatore che produce sia indice che riga

import pandas as pd
import numpy as np

df = pd.DataFrame([{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}])

{{{184286}};!->

for index, row in df.iterrows():
    print(row['c1'], row['c2'])

Output: 
   10 100
   11 110
   12 120
Commentari (7)

Dovreste usare df.iterrows(). Anche se iterare riga per riga non è particolarmente efficiente, dato che devono essere creati oggetti Serie.

Commentari (3)

Potete anche usare df.apply() per iterare sulle righe e accedere a più colonne per una funzione.

docs: DataFrame.apply()

def valuation_formula(x, y):
    return x * y * 0.5

df['price'] = df.apply(lambda row: valuation_formula(row['x'], row['y']), axis=1)
Commentari (6)