Hvordan iterere over rækker i et DataFrame i Pandas?

Jeg har en DataFrame fra 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

Nu ønsker jeg at iterere over rækkerne i denne ramme. For hver række ønsker jeg at kunne få adgang til dens elementer (værdier i celler) ved hjælp af kolonnernes navn. F.eks:

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

Er det muligt at gøre det i pandas?

Jeg fandt dette lignende spørgsmål. Men det giver mig ikke det svar, jeg har brug for. For eksempel foreslås det der at bruge:

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

eller

for row in df.iterrows():

Men jeg forstår ikke, hvad row objektet er, og hvordan jeg kan arbejde med det.

Løsning

DataFrame.iterrows er en generator, der giver både indeks og række

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
Kommentarer (7)

Du bør bruge df.iterrows(). Det er dog ikke særlig effektivt at iterere række for række, da der skal oprettes serieobjekter.

Kommentarer (3)

Du kan også bruge df.apply() til at iterere over rækker og få adgang til flere kolonner for en funktion.

docs: DataFrame.apply()1

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

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