Tengo 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
Salida:
c1 c2
0 10 100
1 11 110
2 12 120
Ahora quiero iterar sobre las filas de este marco. Para cada fila quiero poder acceder a sus elementos (valores en celdas) por el nombre de las columnas. Por ejemplo:
for row in df.rows:
print row['c1'], row['c2']
¿Es posible hacer eso en pandas?
He encontrado esta pregunta similar. Pero no me da la respuesta que necesito. Por ejemplo, allí se sugiere usar:
for date, row in df.T.iteritems():
o
for row in df.iterrows():
Pero no entiendo qué es el objeto row
y cómo puedo trabajar con él.
DataFrame.iterrows es un generador que produce tanto el índice como la fila
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
Debería utilizar df.iterrows()
. Aunque iterar fila por fila no es especialmente eficiente ya que hay que crear objetos Series.
También puede utilizar df.apply()
para iterar sobre las filas y acceder a varias columnas para una función.
def valuation_formula(x, y):
return x * y * 0.5
df['price'] = df.apply(lambda row: valuation_formula(row['x'], row['y']), axis=1)