seleccionar recorrer nueva insertar filtrar filas datos data columnas columna agregar python pandas indexing head

python - recorrer - seleccionar columnas de un dataframe pandas



Pandas: obtén el valor de la primera fila de una columna determinada (5)

  1. df.iloc[0].head(1) - Primer conjunto de datos solo desde la primera fila entera.
  2. df.iloc[0] - Toda la primera fila en la columna.

Esto parece una pregunta ridículamente fácil ... pero no veo la respuesta fácil que estaba esperando.

Entonces, ¿cómo obtengo el valor en una enésima fila de una columna dada en Pandas? (Estoy particularmente interesado en la primera fila, pero también estaría interesado en una práctica más general).

Por ejemplo, supongamos que quiero obtener el valor 1.2 en Btime como variable.

¿Cuál es la forma correcta de hacer esto?

df_test =

ATime X Y Z Btime C D E 0 1.2 2 15 2 1.2 12 25 12 1 1.4 3 12 1 1.3 13 22 11 2 1.5 1 10 6 1.4 11 20 16 3 1.6 2 9 10 1.7 12 29 12 4 1.9 1 1 9 1.9 11 21 19 5 2.0 0 0 0 2.0 8 10 11 6 2.4 0 0 0 2.4 10 12 15


De manera general, si desea recoger las primeras N filas de la columna J del marco de datos de pandas, la mejor manera de hacerlo es:

data = dataframe [0: N] [:, J]


Otra forma de hacer esto:

first_value = df[''Btime''].values[0]

De esta manera parece ser más rápido que usar .iloc :

In [1]: %timeit -n 1000 df[''title''].values[20] 5.82 µs ± 142 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each) In [2]: %timeit -n 1000 df[''title''].iloc[20] 29.2 µs ± 1.28 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)


Para seleccionar la iloc fila, use iloc :

In [31]: df_test.iloc[0] Out[31]: ATime 1.2 X 2.0 Y 15.0 Z 2.0 Btime 1.2 C 12.0 D 25.0 E 12.0 Name: 0, dtype: float64

Para seleccionar el i-ésimo valor en la columna Btime , puede usar:

In [30]: df_test[''Btime''].iloc[0] Out[30]: 1.2

Advertencia : anteriormente había sugerido df_test.ix[i, ''Btime''] . Pero no se garantiza que esto le proporcione el ith valor, ya que ix intenta indexar por etiqueta antes de intentar indexar por posición . Entonces, si el DataFrame tiene un índice entero que no está en orden ordenado empezando en 0, entonces al usar ix[i] se devolverá la fila etiquetada como i lugar de la fila ith . Por ejemplo,

In [1]: df = pd.DataFrame({''foo'':list(''ABC'')}, index=[0,2,1]) In [2]: df Out[2]: foo 0 A 2 B 1 C In [4]: df.ix[1, ''foo''] Out[4]: ''C''


Tenga en cuenta que la respuesta de @unutbu será correcta hasta que desee establecer el valor en algo nuevo, y luego no funcionará si su marco de datos es una vista.

In [4]: df = pd.DataFrame({''foo'':list(''ABC'')}, index=[0,2,1]) In [5]: df[''bar''] = 100 In [6]: df[''bar''].iloc[0] = 99 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas-0.16.0_19_g8d2818e-py2.7-macosx-10.9-x86_64.egg/pandas/core/indexing.py:118: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self._setitem_with_indexer(indexer, value)

Otro enfoque que funcionará consistentemente tanto para establecer como para obtener es:

In [7]: df.loc[df.index[0], ''foo''] Out[7]: ''A'' In [8]: df.loc[df.index[0], ''bar''] = 99 In [9]: df Out[9]: foo bar 0 A 99 2 B 100 1 C 100