Panda read_csv () convierte los datos de la primera fila en nombres de columnas, cómo tratarlos

Prefacio

A veces, nos encontraremos con muchos de estos datos, por ejemplo, la primera fila de este csv no es un nombre de columna como imaginamos. De esa manera, cuando procesemos datos, habrá problemas, el primero es inconsistente.


Solución 1

Llame a la biblioteca csv y vuelva a escribir el programa para leer el archivo usted mismo.

La biblioteca csv es una biblioteca que viene con python.

Si los datos son todos tipos de caracteres

En tales condiciones, el problema es muy simple, simplemente llame al iterador de csv.reader () para leerlo.

Si hay números en los datos además de cadenas

A continuación doy una solución.

def float_test(data: str):
    try:
        return float(data)
    except Exception:
        return data


def read(filename):
    """
    :param filename:
    :return:
    """
    values = []
    with open(filename) as f:
        r = csv.reader(f)
        for row in r:
            values.append(list(map(float_test, row)))
    *data, label = list(map(list, zip(*values)))
    return list(zip(*data)), label

Esto se relaciona con un artículo que escribí antes, algoritmo de aprendizaje automático [algoritmo de perceptrón PLA] [leído
en 5 minutos] En el código anterior, necesito leer el modelo para entrenar al perceptrón, pero encontré los datos por mí No hay un nombre de columna y no quiero cambiar los datos, así que primero tengo que encapsularlos. En
estos datos, excepto en la última columna que puede ser un elemento, el resto son números de punto flotante. Entonces, llamé a la función float_test aquí para hacer la prueba.

Las dos últimas líneas, ¿y qué sucede en la devolución? De hecho, quiero separar la última columna y restaurar las otras a una matriz bidimensional. Cada fila es una prueba X.


Solucion 2

Configuración de parámetros! !

Consulte la explicación de la API de read_csv proporcionada por pandas :
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html

Se menciona una oración:

  • encabezado  : int o lista de entradas, predeterminado 'inferir'

    • Número (s) de fila para usar como nombres de columna y el inicio de los datos. El comportamiento predeterminado es inferir los nombres de las columnas: si no se pasan nombres, el comportamiento es idéntico al encabezado = 0 y los nombres de las columnas se infieren de la primera línea del archivo, si los nombres de las columnas se pasan explícitamente, el comportamiento es idéntico al encabezado = Ninguno . Pase explícitamente header = 0 para poder reemplazar nombres existentes. El encabezado puede ser una lista de números enteros que especifican las ubicaciones de las filas para un índice múltiple en las columnas, por ejemplo, [0,1,3]. Se omitirán las filas intermedias que no estén especificadas (por ejemplo, se omitirá 2 en este ejemplo). Tenga en cuenta que este parámetro ignora las líneas comentadas y las líneas vacías si skip_blank_lines = True, por lo que header = 0 denota la primera línea de datos en lugar de la primera línea del archivo.
  • nombres  : tipo matriz, predeterminado Ninguno

    • Lista de nombres de columna para usar. Si el archivo no contiene una fila de encabezado, debe pasar explícitamente header = None. Los duplicados en esta lista causarán que se emita una advertencia al usuario.

Con respecto al parámetro de nombres , cuando el archivo no cubre el encabezado , ¡debe indicarlo claramente en el parámetro de encabezado! !

Esta es la interpretación correcta, por lo que la operación correcta es (** tomando un 1.csv** archivo como ejemplo)

import pandas as pd

df = pd.read_csv('1.csv', header=None, names=['test'])

Entonces esta columna sin un nombre de columna se establecerá como la columna de prueba ~

Supongo que te gusta

Origin blog.csdn.net/u013066730/article/details/108573187
Recomendado
Clasificación