Mám DataFrame
z pandas:
import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
print df
Výstup:
c1 c2
0 10 100
1 11 110
2 12 120
Teraz chcem iterovať po riadkoch tohto rámca. Pre každý riadok chcem mať prístup k jeho prvkom (hodnotám v bunkách) podľa názvu stĺpcov. Napríklad:
for row in df.rows:
print row['c1'], row['c2']
Je to možné urobiť v programe pandas?
Našiel som túto podobnú otázku. Ale nedáva mi to odpoveď, ktorú potrebujem. Napríklad sa tam navrhuje použiť:
for date, row in df.T.iteritems():
alebo
for row in df.iterrows():
Nerozumiem však, čo je objekt riadok
a ako s ním môžem pracovať.
DataFrame.iterrows je generátor, ktorý dáva index aj riadok
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
Mali by ste použiť df.iterrows()
. Hoci iterácia po riadkoch nie je obzvlášť efektívna, pretože je potrebné vytvoriť objekty Series.
Na iteráciu po riadkoch a prístup k viacerým stĺpcom funkcie môžete použiť aj funkciu df.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)