Problema al convertir datos leídos por pandas a una lista

Tabla de contenido

La introducción del problema.

Figura 1

Figura 2

imagen 3

pensar

Figura 4

Figura 5

resolver

Figura 6


La introducción del problema.

Primero mire el contenido del archivo csv, como se muestra en la Figura 1

Figura 1

Se puede ver que la columna "b" en el archivo csv tiene tanto tipo int como tipo flotante.

Primero veamos un fragmento de código.

from pandas import read_csv
df=read_csv('test.csv')
print(df)

La impresión se muestra en la Figura 1.

Figura 2

Como se puede ver en la Figura 2, los datos de la columna "b" solo son de tipo flotante y no de tipo int. Luego convierta el objeto DataFrame en un objeto de lista, el código es el siguiente

from pandas import read_csv
df=read_csv('test.csv')
df_list=df.values.tolist()
print(df_list)

El resultado de la impresión se muestra en la Figura 3.

imagen 3

Como puede verse en la Figura 3, todos los números se han convertido en tipos flotantes. Hay un problema aquí. El problema es que el tipo de datos es incorrecto. La tercera columna es de tipo int, pero cuando se convierte a ndarray, se convierte en un tipo flotante. Por supuesto, al leer el archivo csv, el tipo también se debe convertir a la fuerza, este problema no se discutirá aquí.

pensar

En el código fuente, podemos ver que el valor de retorno del tipo ndarray del atributo "valores" se muestra en la Figura 4.

Figura 4

Luego mire el fragmento de código.

import numpy as np
arr=np.array([[1.0,2],[2,3]])
print(arr)

El resultado de la impresión se muestra en la Figura 5.

Figura 5

De la Figura 5 y el código anterior, podemos deducir audazmente una conclusión: sin forzar la conversión de tipos, si un tipo de datos que se puede convertir a ndarray contiene datos flotantes, el tipo de datos de todo el ndarray se convertirá a tipo flotante.

Aunque convertir un objeto DataFrame en una lista a través del atributo de valores y el método tolist es rápido y solo requiere una línea de código, si hay un tipo flotante en todos los datos del objeto DataFrame, otras columnas también se verán obligadas a convertirse. .

resolver

Por lo tanto, el autor cree que hay un problema con los valores "atributos" de este DataFrame. Por supuesto que se puede utilizar.

El autor no encontró una solución perfecta, así que utilicé un método más problemático. El código se muestra a continuación.

from pandas import read_csv
from pandas.core.frame import DataFrame
def DataFrame2list(df:DataFrame)->list:
    df_list=[]
    for row in range(df.shape[0]):  # df.shape[0] 获得总行数
        col_list=[]
        for col in range(df.shape[1]):  # df.shape[1] 获得总列数
            col_list.append(df.iat[row,col])  # iat 一个一个取值
        df_list.append(col_list)
    return df_list
df=read_csv('test.csv')
df_list=DataFrame2list(df)
print(df_list)

El código anterior es un bucle secundario, lo cual es bastante problemático. Si alguien conoce otras formas de resolver este problema, puede dejar un mensaje en el área de comentarios. El resultado de la impresión se muestra en la Figura 6.

Figura 6

Supongo que te gusta

Origin blog.csdn.net/qq_63401240/article/details/132769531
Recomendado
Clasificación