Tengo una lista en Python. Necesito filtrar una columna sin usar Pandas. Intenté lo siguiente. Pero no funciona.

Datos:

enter image description here

Por ejemplo, haré algunos cálculos solo para País = 'Canadá'.

filtered = [x for x in data if data[0] == "Canada"]

Editada:

Originalmente, tengo un archivo csv. contiene datos de 1960 a 2017 para los países. Necesito calcular (para 'Suecia') el aumento porcentual anual en comparación con el año anterior y encontrar el año que tiene el aumento más alto en términos de porcentaje. Columnas como estas: País, 1960, 1961, 1962, ... hasta 2017.

Datos en Python: (después de dividir)

enter image description here

-1
ds_ds 9 dic. 2020 a las 13:59

3 respuestas

La mejor respuesta

Ok, parece que tus datos son solo una lista ininterrumpida. Si tiene razón casi todos los años entre 1960 y 2017, más la columna de la etiqueta, debe haber 59 entradas por fila.

Realmente sugiero que primero intente reformatear los datos en una lista de listas o algo similar, pero intente esto mientras tanto:

# Reformat the data a little
data = [i for s in data for i in s.split('\n')]

# Filter the data
row_len = 59
filtered = list([zip(data[1:row_len], data[i+1:i+row_len]) for i in range(len(data)) if data[i] == 'Sweden'][0])

Editar: Eso debería agrupar el año con los datos del país (Suecia en este caso).

1
Keldan Chapman 9 dic. 2020 a las 13:44

¿Tratar?

filtered = [x for x in data if x == "Canada"]

Para datos anidados:

filtered = [x for x in data if x[0] == "Canada"]
0
Anna Semjén 9 dic. 2020 a las 11:10

¿Puede proporcionar la lista?

Por lo que ha proporcionado, pero parece que le falta un subíndice. probar: filtrado = [x para x en los datos si los datos [0] [0] == 'Canadá']

Esto supone que los encabezados de la columna h no forman parte de su lista. Puede si lo son, entonces usted diría que sus datos [1] [0] en lugar de datos [0] [0]

0
Derrik Dennis 9 dic. 2020 a las 11:10
65215449