una seleccionar nueva insertar data columnas columna agregar python pandas dataframe indexing

python - seleccionar - Seleccionando una fila de pandas series/dataframe por índice entero



seleccionar columnas de un dataframe pandas (6)

El propósito principal del operador de indexación de DataFrame, [] es seleccionar columnas.

Cuando al operador de indexación se le pasa una cadena o un entero, intenta encontrar una columna con ese nombre en particular y devolverla como una Serie.

Entonces, en la pregunta anterior: df[2] busca un nombre de columna que coincida con el valor entero 2 . Esta columna no existe y se KeyError un KeyError .

El operador de indexación de DataFrame cambia completamente el comportamiento para seleccionar filas cuando se utiliza la notación de segmento

Extrañamente, cuando se le da una porción, el operador de indexación de DataFrame selecciona filas y puede hacerlo por ubicación de entero o por etiqueta de índice.

df[2:3]

Esto partirá desde la fila con la ubicación del entero 2 hasta 3, excluyendo el último elemento. Por lo tanto, sólo una sola fila. Lo siguiente selecciona las filas que comienzan en la ubicación del entero 6 hasta pero que no incluyen 20 por cada tercera fila.

df[6:20:3]

También puede usar segmentos que consisten en etiquetas de cadena si su índice DataFrame tiene cadenas. Para más detalles, vea esta solución en .iloc vs .loc .

Casi nunca uso esta notación de segmento con el operador de indexación, ya que no es explícito y casi nunca se usa. Cuando corte por filas, .loc/.iloc con .loc/.iloc .

Tengo curiosidad por saber por qué df[2] no es compatible, mientras que df.ix[2] y df[2:3] funcionan ambos.

In [26]: df.ix[2] Out[26]: A 1.027680 B 1.514210 C -1.466963 D -0.162339 Name: 2000-01-03 00:00:00 In [27]: df[2:3] Out[27]: A B C D 2000-01-03 1.02768 1.51421 -1.466963 -0.162339

Espero que df[2] funcione de la misma manera que df[2:3] para ser consistente con la convención de indexación de Python. ¿Hay alguna razón de diseño para no admitir la indexación fila por entero entero?


Haciendo eco de @HYRY, vea los nuevos documentos en 0.11

http://pandas.pydata.org/pandas-docs/stable/indexing.html

Aquí tenemos nuevos operadores, .iloc para explícitamente admite solo la indexación de enteros, y .loc para explícitamente solo para la indexación de etiquetas

por ejemplo, imagina este escenario

In [1]: df = pd.DataFrame(np.random.rand(5,2),index=range(0,10,2),columns=list(''AB'')) In [2]: df Out[2]: A B 0 1.068932 -0.794307 2 -0.470056 1.192211 4 -0.284561 0.756029 6 1.037563 -0.267820 8 -0.538478 -0.800654 In [5]: df.iloc[[2]] Out[5]: A B 4 -0.284561 0.756029 In [6]: df.loc[[2]] Out[6]: A B 2 -0.470056 1.192211

[] corta las filas (por ubicación de etiqueta) solamente


Para el acceso basado en índices a la tabla de pandas, también se puede considerar la opción numpy.as_array para convertir la tabla en una matriz de Numpy como

np_df = df.as_matrix()

y entonces

np_df[i]

trabajaría.


Puedes echar un vistazo al código fuente .

DataFrame tiene una función privada _slice() para DataFrame el DataFrame , y permite que el axis parámetros determine qué eje segmentar. El __getitem__() para DataFrame no establece el eje al invocar _slice() . Así que el _slice() corta por defecto en el eje 0.

Puedes tomar un experimento simple, que podría ayudarte:

print df._slice(slice(0, 2)) print df._slice(slice(0, 2), 0) print df._slice(slice(0, 2), 1)


Puedes pensar en DataFrame como un dict de Series. df[key] intente seleccionar el índice de columna por key y devuelve un objeto Serie.

Sin embargo, cortar dentro de [] corta las filas, porque es una operación muy común.

Puedes leer el documento para más detalles:

http://pandas.pydata.org/pandas-docs/stable/indexing.html#basics


Puedes recorrer el cuadro de datos de esta manera.

for ad in range(1,dataframe_c.size): print(dataframe_c.values[ad])