Eu tenho um '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
Saída:
c1 c2
0 10 100
1 11 110
2 12 120
Agora quero iterar sobre as filas deste quadro. Para cada linha eu quero poder acessar seus elementos (valores em células) pelo nome das colunas. Por exemplo:
for row in df.rows:
print row['c1'], row['c2']
É possível fazer isso em pandas?
Eu encontrei esta pergunta semelhante. Mas isso não me dá a resposta que eu preciso. Por exemplo, é sugerido lá para usar:
for date, row in df.T.iteritems():
ou
for row in df.iterrows():
Mas eu não entendo o que é o objeto "linha" e como posso trabalhar com ele.
DataFrame.iterrows é um gerador que produz tanto o índice como a linha
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
Você deve utilizar df.iterrows()
. Embora a iteração linha a linha não seja especialmente eficiente, uma vez que objetos em série têm de ser criados.
Você também pode utilizar df.apply()
para iterar sobre as linhas e acessar várias colunas para uma função.
def valuation_formula(x, y):
return x * y * 0.5
df['price'] = df.apply(lambda row: valuation_formula(row['x'], row['y']), axis=1)