¿Cómo selecciono un elemento en la columna de matriz de un marco de datos? -- python campo con arrays campo con numpy campo con pandas camp Relacionados El problema

How do I select an element in array column of a data frame?


7
vote

problema

Español

Tengo el siguiente marco de datos:

  pa=pd.DataFrame({'a':np.array([[1.,4.],[2.],[3.,4.,5.]])})   

Quiero seleccionar la columna 'a' y luego solo un elemento en particular (es decir, primero: 1., 2., 3.)

¿Qué necesito para agregar a:

  pa.loc[:,['a']]   

?

Original en ingles

I have the following data frame:

pa=pd.DataFrame({'a':np.array([[1.,4.],[2.],[3.,4.,5.]])}) 

I want to select the column 'a' and then only a particular element (i.e. first: 1., 2., 3.)

What do I need to add to:

pa.loc[:,['a']] 

?

           

Lista de respuestas

14
 
vote
vote
La mejor respuesta
 

class User < ActiveRecord::Base def self.find_in_order(ids) self.where(id: ids).order("FIELD(id, #{ids.join(',')})") end end User.find_in_order([1, 100, 5, 30, 4, 2, 88, 44]) 5 Selecciona la fila con la etiqueta class User < ActiveRecord::Base def self.find_in_order(ids) self.where(id: ids).order("FIELD(id, #{ids.join(',')})") end end User.find_in_order([1, 100, 5, 30, 4, 2, 88, 44]) 6 .

class User < ActiveRecord::Base def self.find_in_order(ids) self.where(id: ids).order("FIELD(id, #{ids.join(',')})") end end User.find_in_order([1, 100, 5, 30, 4, 2, 88, 44]) 7 Selecciona las celdas que son la inserción de class User < ActiveRecord::Base def self.find_in_order(ids) self.where(id: ids).order("FIELD(id, #{ids.join(',')})") end end User.find_in_order([1, 100, 5, 30, 4, 2, 88, 44]) 8 y class User < ActiveRecord::Base def self.find_in_order(ids) self.where(id: ids).order("FIELD(id, #{ids.join(',')})") end end User.find_in_order([1, 100, 5, 30, 4, 2, 88, 44]) 9

User.where(id: ids).sort_by { |u| ids.index(u.id) } 0 Selecciona todas las filas y la columna llamada User.where(id: ids).sort_by { |u| ids.index(u.id) } 1 . Tenga en cuenta que aunque esto funciona, no es la forma idiomática de referirse a una columna de unframe de datos. Para que deba usar User.where(id: ids).sort_by { |u| ids.index(u.id) } 2

Ahora tiene listas en las celdas de su columna para que pueda usar el métodos de cadena vectorizados para acceder a los elementos de las listas como también.

  User.where(id: ids).sort_by { |u| ids.index(u.id) } 3  
 

pa.loc[row] selects the row with label row.

pa.loc[row, col] selects the cells which are the instersection of row and col

pa.loc[:, col] selects all rows and the column named col. Note that although this works it is not the idiomatic way to refer to a column of a dataframe. For that you should use pa['a']

Now you have lists in the cells of your column so you can use the vectorized string methods to access the elements of those lists like so.

pa['a'].str[0] #first value in lists pa['a'].str[-1] #last value in lists 
 
 
 
 
10
 
vote

El almacenamiento de listas como valores en un contexto de Pandas tiende a ser un error porque le impide aprovechar las operaciones vectorizadas de forma rápida o pandas.

Por lo tanto, podría estar mejor conversar su estructura de datos de listas de números en un proceso de datos más amplio con DTTYPES nativos:

  import numpy as np import pandas as pd  pa = pd.DataFrame({'a':np.array([[1.,4.],[2.],[3.,4.,5.]])}) df = pd.DataFrame(pa['a'].values.tolist()) #      0    1    2 # 0  1.0  4.0  NaN # 1  2.0  NaN  NaN # 2  3.0  4.0  5.0   

Ahora, podría seleccionar la primera columna como esta:

  In [36]: df.iloc[:, 0] Out[36]:  0    1.0 1    2.0 2    3.0 Name: 0, dtype: float64   

o la primera fila como esta:

  In [37]: df.iloc[0, :] Out[37]:  0    1.0 1    4.0 2    NaN Name: 0, dtype: float64   

Si desea eliminar a los NANCOS, use .dropna() :

  In [38]: df.iloc[0, :].dropna() Out[38]:  0    1.0 1    4.0 Name: 0, dtype: float64   

y .tolist() para recuperar los valores como una lista:

  In [39]: df.iloc[0, :].dropna().tolist() Out[39]: [1.0, 4.0]   

Pero si desea aprovechar la velocidad de NUMPY / PANDAS, querrá expresar su cálculo como operaciones vectoriales en df mismo sin convertirse en listas de Python.

 

Storing lists as values in a Pandas DataFrame tends to be a mistake because it prevents you from taking advantage of fast NumPy or Pandas vectorized operations.

Therefore, you might be better off converting your DataFrame of lists of numbers into a wider DataFrame with native NumPy dtypes:

import numpy as np import pandas as pd  pa = pd.DataFrame({'a':np.array([[1.,4.],[2.],[3.,4.,5.]])}) df = pd.DataFrame(pa['a'].values.tolist()) #      0    1    2 # 0  1.0  4.0  NaN # 1  2.0  NaN  NaN # 2  3.0  4.0  5.0 

Now, you could select the first column like this:

In [36]: df.iloc[:, 0] Out[36]:  0    1.0 1    2.0 2    3.0 Name: 0, dtype: float64 

or the first row like this:

In [37]: df.iloc[0, :] Out[37]:  0    1.0 1    4.0 2    NaN Name: 0, dtype: float64 

If you wish to drop NaNs, use .dropna():

In [38]: df.iloc[0, :].dropna() Out[38]:  0    1.0 1    4.0 Name: 0, dtype: float64 

and .tolist() to retrieve the values as a list:

In [39]: df.iloc[0, :].dropna().tolist() Out[39]: [1.0, 4.0] 

but if you wish to leverage NumPy/Pandas for speed, you'll want to express your calculation as vectorized operations on df itself without converting back to Python lists.

 
 

Relacionados problema

2  Python MultiPhreading no aumenta la velocidad  ( Python multithreading doesnt increase speed ) 
Tengo 2 archivos separados que contienen las coordenadas de un lugar y el otro que contiene la calle y el código postal. Mediante el uso de pandas Quiero ...

0  Coincidencia de cadenas en Python Pandas DataFrame cuando hay diferentes posibilidades  ( String match in python pandas dataframe when there is different possibilities ) 
Ingrese la descripción de la imagen aquí Tengo un conteo de datos (300,000 filas) con 4 columnas. Tengo una columna "Modelo" donde tengo los siguientes va...

1  ¿Puedes usar Pandas Groupby para agrupar filas, determinado sumando un valor de columna?  ( Can you use pandas groupby to group rows determined by summing a column value ) 
Me gustaría agrupar filas en un contexto de datos por valores de una columna. El ejemplo dado a continuación sería si estuviera agrupando los valores de 'Numb...

0  Fusionar con el minuto más cercano usando Pandas  ( Merge with the nearest minute using pandas ) 
Simplemente quiero fusionar dos cuadros de datos dentro de ± 1 min. AQUÍ NAME_DF con el conjunto de datos de muestra: Name Date A 2/19/2019 17:1...

0  El valor de la verdad de una serie es ambiguo. ¿Cómo puedo arreglar este error? [duplicar]  ( The truth value of a series is ambiguous how do i fix this error ) 
Esta pregunta ya tiene respuestas aquí : El valor de la verdad de una serie es ambiguo. Use A.EMPTY,...

1  Pandas DataFrame al diccionario con tuplas como clave y valores  ( Pandas dataframe to dictionary with tuples as key and values ) 
Necesito ayuda para hacer lo siguiente: Tengo un archivo CSV como lo siguiente, cargado en un Frame 'DF'. Hay varias regiones, diferentes valores para la me...

2  Pandas Groupby y Selector orden  ( Pandas groupby and selector order ) 
Di que tengo un contexto de datos con 3 columnas: Criteria Group Value 0 A 0 0.1 1 B 0 0.2 2 B 1 0.3 3 B ...

-1  ¿Cómo lo convierto en este código OUTERHTML para sacar ciertos datos? (No sé cómo visualizarlo, así que quiero probar esto)  ( How do i loop over this outerhtml code to get out certain data i dont know ho ) 
Estoy tratando de obtener una lista que coincida con los distritos de la India a sus códigos de distrito, ya que fueron durante el censo de la población de 20...

2  Cambiar filas en pandas  ( Change rows in pandas ) 
Tengo una matriz en marco de datos de Pandas print dfMatrix 0 1 2 3 4 0 10000 10 8 11 10 1 10 100000 ...

8  Añadir la tasa de cambio a Pandas DataFrame  ( Add rate of change to pandas dataframe ) 
Tengo el siguiente fábrico de datos de Pandas: lastrun value 0 2013-10-24 13:10:05+00:00 55376 1 2013-...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos