tablas - pandas python tutorial español pdf
Python Pandas iterar sobre filas y acceder a los nombres de columna (2)
El elemento de iterrows()
no es una serie, sino una tupla de (índice, serie), por lo que puede descomprimir la tupla en el bucle for así:
for (idx, row) in df.iterrows():
print(row.loc[''A''])
print(row.A)
print(row.index)
#0.890618586836
#0.890618586836
#Index([''A'', ''B'', ''C'', ''D''], dtype=''object'')
Estoy tratando de iterar sobre las filas de un marco de datos de Python Pandas. Dentro de cada fila del marco de datos, estoy tratando de referirme a cada valor a lo largo de una fila por su nombre de columna.
Esto es lo que tengo:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(10,4),columns=list(''ABCD''))
print df
A B C D
0 0.351741 0.186022 0.238705 0.081457
1 0.950817 0.665594 0.671151 0.730102
2 0.727996 0.442725 0.658816 0.003515
3 0.155604 0.567044 0.943466 0.666576
4 0.056922 0.751562 0.135624 0.597252
5 0.577770 0.995546 0.984923 0.123392
6 0.121061 0.490894 0.134702 0.358296
7 0.895856 0.617628 0.722529 0.794110
8 0.611006 0.328815 0.395859 0.507364
9 0.616169 0.527488 0.186614 0.278792
Utilicé este método para iterar, pero solo me está dando parte de la solución: después de seleccionar una fila en cada iteración, ¿cómo accedo a los elementos de las filas por su nombre de columna?
Esto es lo que estoy tratando de hacer:
for row in df.iterrows():
print row.loc[0,''A'']
print row.A
print row.index()
Mi entendimiento es que la fila es una series Pandas. Pero no tengo forma de indexar en la serie.
¿Es posible usar nombres de columnas mientras se iteran simultáneamente sobre filas?
También me gusta itertuples()
for row in df.itertuples():
print(row.A)
print(row.Index)
ya que row es una tupla con nombre, si quisieras acceder a los valores en cada fila, esto debería ser MUCHO más rápido
carrera de velocidad :
df = pd.DataFrame([x for x in range(1000*1000)], columns=[''A''])
st=time.time()
for index, row in df.iterrows():
row.A
print(time.time()-st)
45.05799984931946
st=time.time()
for row in df.itertuples():
row.A
print(time.time() - st)
0.48400020599365234