Kā Pandas programmā iterēt rindas DataFrame?

Man ir DataFrame no pandas:

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

Izejas dati:

   c1   c2
0  10  100
1  11  110
2  12  120

Tagad es gribu iterēt šī rāmja rindas. Katrai rindai es gribu piekļūt tās elementiem (vērtībām šūnās) pēc kolonnu nosaukuma. Piemēram:

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

Vai to ir iespējams izdarīt ar pandas?

Es atradu šo līdzīgu jautājumu. Bet tas nesniedz man vajadzīgo atbildi. Piemēram, tur ir ieteikts izmantot:

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

vai

for row in df.iterrows():

Bet es nesaprotu, kas ir row objekts un kā ar to strādāt.

Risinājums

DataFrame.iterrows ir ģenerators, kas dod gan indeksu, gan rindu.

import pandas as pd
import numpy as np

df = pd.DataFrame([{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}])
for index, row in df.iterrows():
    print(row['c1'], row['c2'])

Output: 
   10 100
   11 110
   12 120
Komentāri (7)

Jums jāizmanto df.iterrows(). Lai gan iterēšana rindu pa rindai nav īpaši efektīva, jo ir jārada Series objekti.

Komentāri (3)

Varat arī izmantot df.apply(), lai iterētu pa rindām un piekļūtu vairākām kolonnām funkcijai.

Dokumenti: 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)
Komentāri (6)