J'ai un DataFrame
de pandas :
import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
print df
Sortie :
c1 c2
0 10 100
1 11 110
2 12 120
Maintenant, je veux itérer sur les lignes de ce cadre. Pour chaque ligne, je veux pouvoir accéder à ses éléments (valeurs dans les cellules) par le nom des colonnes. Par exemple :
for row in df.rows:
print row['c1'], row['c2']
Est-il possible de faire cela dans pandas ?
J'ai trouvé cette [question similaire][1]. Mais cela ne me donne pas la réponse dont j'ai besoin. Par exemple, il y est suggéré d'utiliser :
for date, row in df.T.iteritems():
ou
for row in df.iterrows():
Mais je ne comprends pas ce qu'est l'objet row
et comment je peux travailler avec lui.
DataFrame.iterrows est un générateur qui produit à la fois l'index et la ligne.
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
Vous devriez utiliser [df.iterrows()
][1]. Bien que l'itération ligne par ligne ne soit pas particulièrement efficace puisque les objets Series doivent être créés.
[1] : http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iterrows.html
Vous pouvez également utiliser df.apply()
pour itérer sur les lignes et accéder à plusieurs colonnes pour une fonction.
[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)
[1] : http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html