O Panda read_csv () transforma os dados da primeira linha em nomes de colunas, como lidar com eles

Prefácio

Às vezes, encontraremos muitos desses dados, por exemplo, a primeira linha deste csv não é um nome de coluna como imaginamos. Dessa forma, quando processamos dados, haverá problemas, o primeiro é inconsistente.


Solução 1

Chame a biblioteca csv e reescreva o programa para ler o arquivo você mesmo.

A biblioteca csv é uma biblioteca que vem com o python.

Se os dados forem todos tipos de caracteres

Sob tais condições, o problema é muito simples, basta chamar o iterador de csv.reader () para lê-lo.

Se houver números nos dados, além de strings

Abaixo eu dou uma solução.

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

Isso está relacionado a um artigo que escrevi antes, algoritmo de aprendizado de máquina [Algoritmo de Perceptron PLA] [leitura
em 5 minutos] No código acima, preciso ler o modelo para treinar o perceptron, mas encontrei os dados para mim Não há nome de coluna e não quero alterar os dados, então só tenho que encapsulá-los primeiro. Nestes
dados, exceto para a última coluna que pode ser um elemento, o resto são números de ponto flutuante. Então, chamei a função float_test aqui para fazer o teste.

As duas últimas linhas e o que acontece no retorno? Na verdade, quero separar a última coluna e restaurar as outras em uma matriz bidimensional. Cada linha é um teste X.


Solução 2

Configurando parâmetros! !

Consulte a explicação da API de read_csv fornecida por pandas :
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html

Há uma frase mencionada:

  • cabeçalho  : int ou lista de ints, padrão 'inferir'

    • Número (s) de linha a usar como nomes de coluna e o início dos dados. O comportamento padrão é inferir os nomes das colunas: se nenhum nome for passado, o comportamento é idêntico a header = 0 e os nomes das colunas são inferidos da primeira linha do arquivo; se os nomes das colunas forem passados ​​explicitamente, o comportamento é idêntico a header = None . Passe header = 0 explicitamente para poder substituir nomes existentes. O cabeçalho pode ser uma lista de inteiros que especificam as localizações das linhas para um índice múltiplo nas colunas, por exemplo [0,1,3]. As linhas intermediárias que não foram especificadas serão ignoradas (por exemplo, 2 neste exemplo é ignorado). Observe que este parâmetro ignora linhas comentadas e linhas vazias se skip_blank_lines = True, então header = 0 denota a primeira linha de dados em vez da primeira linha do arquivo.
  • nomes  : tipo array, padrão Nenhum

    • Lista de nomes de colunas a serem usados. Se o arquivo não contém nenhuma linha de cabeçalho, você deve passar explicitamente header = None. Duplicatas nesta lista farão com que um UserWarning seja emitido.

Quanto ao parâmetro de nomes , quando o arquivo não cobre o cabeçalho , então você precisa indicá-lo claramente no parâmetro de cabeçalho! !

Esta é a interpretação correta, então a operação correta é (** tomando um 1.csv** arquivo como exemplo)

import pandas as pd

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

Então, esta coluna sem um nome de coluna será definida como a coluna de teste ~

Acho que você gosta

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