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.
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
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.
Du kan også bruge df.apply()
til at iterere over rækker og få adgang til flere kolonner for en funktion.
def valuation_formula(x, y):
return x * y * 0.5
df['price'] = df.apply(lambda row: valuation_formula(row['x'], row['y']), axis=1)