AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 78275755
Accepted
dimButTries
dimButTries
Asked: 2024-04-05 01:58:27 +0800 CST2024-04-05 01:58:27 +0800 CST 2024-04-05 01:58:27 +0800 CST

Maneira mais rápida de criar um novo df a partir de uma fonte de dados inconsistente

  • 772

Estou enfrentando um problema com uma API que fornece respostas com números variados de campos. Apesar da API oferecer um total de 106 campos, os itens de resposta geralmente contêm números diferentes de campos devido à disponibilidade de dados (um subconjunto do total de 106).

Portanto, um novo dataframe que precisa ser preenchido talvez data['items'][0]tenha 28 de 106 campos/valores e data['items'][1]100 de 106.

Não consigo encontrar uma maneira de me beneficiar das várias otimizações do Pandas ao importar dados e simplesmente faço, por exemplo:

df = pd.DataFrame(data['items'])
df.columns = data['headers']

O que gera uma incompatibilidade de comprimento

ValueError: Incompatibilidade de comprimento: o eixo esperado tem 55 elementos, os novos valores têm 106 elementos

Para contornar isso, primeiro crio um dataframe vazio com os cabeçalhos corretos e, em seguida, anexo cada item individualmente. No entanto, este método se mostra ineficiente para grandes conjuntos de dados (250.000+)

df = pd.DataFrame(columns=data['headers'])

for item in data['items']:
    item_series = pd.Series(item, index=data['fields'])
    df = pd.concat([df, item_series.to_frame().T], ignore_index=True)

Estou buscando conselhos sobre uma abordagem mais eficiente para lidar com essa discrepância e melhorar a instanciação de dataframe e os processos de atualização. Qualquer sugestão seria apreciada.

Instantâneo de dados que anonimizei:

d = {
  "headers": [
    "Header 1",
    "Header 2",
    "Header 3",
    "Header 4",
    "Header 5",
    "Header 6",
    "Header 7",
    "Header 8",
    "Header 9",
    "Header 10",
    "Header 11",
    "Header 12",
    "Header 13",
    "Header 14",
    "Header 15",
    "Header 16",
    "Header 17",
    "Header 18",
    "Header 19",
    "Header 20",
    "Header 21",
    "Header 22",
    "Header 23",
    "Header 24",
    "Header 25",
    "Header 26",
    "Header 27",
    "Header 28",
    "Header 29",
    "Header 30",
    "Header 31",
    "Header 32",
    "Header 33",
    "Header 34",
    "Header 35",
    "Header 36",
    "Header 37",
    "Header 38",
    "Header 39",
    "Header 40",
    "Header 41",
    "Header 42",
    "Header 43",
    "Header 44",
    "Header 45",
    "Header 46",
    "Header 47",
    "Header 48",
    "Header 49",
    "Header 50",
    "Header 51",
    "Header 52",
    "Header 53",
    "Header 54",
    "Header 55",
    "Header 56",
    "Header 57",
    "Header 58",
    "Header 59",
    "Header 60",
    "Header 61",
    "Header 62",
    "Header 63",
    "Header 64",
    "Header 65",
    "Header 66",
    "Header 67",
    "Header 68",
    "Header 69",
    "Header 70",
    "Header 71",
    "Header 72",
    "Header 73",
    "Header 74",
    "Header 75",
    "Header 76",
    "Header 77",
    "Header 78",
    "Header 79",
    "Header 80",
    "Header 81",
    "Header 82",
    "Header 83",
    "Header 84",
    "Header 85",
    "Header 86",
    "Header 87",
    "Header 88",
    "Header 89",
    "Header 90",
    "Header 91",
    "Header 92",
    "Header 93",
    "Header 94",
    "Header 95",
    "Header 96",
    "Header 97",
    "Header 98",
    "Header 99",
    "Header 100",
    "Header 101",
    "Header 102",
    "Header 103",
    "Header 104",
    "Header 105",
    "Header 106"
  ],
  "items": [
    {
      "Header 17": "anon1",
      "Header 27": "anon2",
      "Header 28": "anon3",
      "Header 29": "anon4",
      "Header 32": "anon5",
      "Header 33": "anon6",
      "Header 34": "anon7",
      "Header 35": "anon8",
      "Header 36": "anon9",
      "Header 37": "anon10",
      "Header 38": "anon11",
      "Header 39": "anon12",
      "Header 40": "anon13",
      "Header 46": "anon14",
      "Header 50": "anon15",
      "Header 52": "anon16",
      "Header 53": "anon17",
      "Header 55": "anon18",
      "Header 56": "anon19",
      "Header 57": "anon20",
      "Header 58": "anon21",
      "Header 59": "anon22",
      "Header 61": "anon23",
      "Header 62": "anon24",
      "Header 63": "anon25",
      "Header 67": "anon26",
      "Header 68": "anon27",
      "Header 71": "anon28",
      "Header 73": "anon29",
      "Header 75": "anon30",
      "Header 76": "anon31",
      "Header 80": "anon32",
      "Header 81": "anon33",
      "Header 82": "anon34",
      "Header 83": "anon35",
      "Header 84": "anon36",
      "Header 85": "anon37",
      "Header 87": "anon38",
      "Header 88": "anon39",
      "Header 89": "anon40",
      "Header 91": "anon41",
      "Header 92": "anon42",
      "Header 94": "anon43",
      "Header 96": "anon44",
      "Header 97": "anon45",
      "Header 99": "anon46",
      "Header 105": "anon47"
    }
  ],
}
pandas
  • 2 2 respostas
  • 21 Views

2 respostas

  • Voted
  1. Best Answer
    mozway
    2024-04-05T02:32:01+08:002024-04-05T02:32:01+08:00

    Basta passar os cabeçalhos para o DataFrameconstrutor:

    pd.DataFrame(data['items'], columns=data['headers'])
    

    Se por algum motivo você precisar instanciar sem os nomes, depois reindex:

    df = pd.DataFrame(data['items'])
    df = df.reindex(columns=data['headers'])
    

    Saída:

       Header 1  Header 2  Header 3  Header 4  Header 5  Header 6  Header 7  Header 8  Header 9  Header 10  Header 11  Header 12  Header 13  Header 14  Header 15  Header 16 Header 17  Header 18  Header 19  Header 20  Header 21  Header 22  Header 23  Header 24  Header 25  Header 26 Header 27 Header 28 Header 29  Header 30  Header 31 Header 32 Header 33 Header 34 Header 35 Header 36 Header 37 Header 38 Header 39 Header 40  Header 41  Header 42  Header 43  Header 44  Header 45 Header 46  Header 47  Header 48  Header 49 Header 50  Header 51 Header 52 Header 53  Header 54 Header 55 Header 56 Header 57 Header 58 Header 59  Header 60 Header 61 Header 62 Header 63  Header 64  Header 65  Header 66 Header 67 Header 68  Header 69  Header 70 Header 71  Header 72 Header 73  Header 74 Header 75 Header 76  Header 77  Header 78  Header 79 Header 80 Header 81 Header 82 Header 83 Header 84 Header 85  Header 86 Header 87 Header 88 Header 89  Header 90 Header 91 Header 92  Header 93 Header 94  Header 95 Header 96 Header 97  Header 98 Header 99  Header 100  Header 101  Header 102  Header 103  Header 104 Header 105  Header 106
    0       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN        NaN        NaN        NaN        NaN        NaN        NaN        NaN     anon1        NaN        NaN        NaN        NaN        NaN        NaN        NaN        NaN        NaN     anon2     anon3     anon4        NaN        NaN     anon5     anon6     anon7     anon8     anon9    anon10    anon11    anon12    anon13        NaN        NaN        NaN        NaN        NaN    anon14        NaN        NaN        NaN    anon15        NaN    anon16    anon17        NaN    anon18    anon19    anon20    anon21    anon22        NaN    anon23    anon24    anon25        NaN        NaN        NaN    anon26    anon27        NaN        NaN    anon28        NaN    anon29        NaN    anon30    anon31        NaN        NaN        NaN    anon32    anon33    anon34    anon35    anon36    anon37        NaN    anon38    anon39    anon40        NaN    anon41    anon42        NaN    anon43        NaN    anon44    anon45        NaN    anon46         NaN         NaN         NaN         NaN         NaN     anon47         NaN
    
    • 1
  2. Coder From Mars
    2024-04-05T02:32:56+08:002024-04-05T02:32:56+08:00

    Lidar com uma API que retorna números variados de campos em suas respostas pode realmente ser um grande desafio, especialmente quando se trabalha com grandes conjuntos de dados em pandas. Sua abordagem atual de anexar cada item individualmente a um DataFrame é simples, mas não eficiente para conjuntos de dados maiores.

    1. Primeiro, certifique-se de que seus dados estejam em um formato com o qual json_normalize possa trabalhar. Pela sua descrição, parece que seus dados já estão no formato apropriado.

    2) Use json_normalize para criar um DataFrame. Esta função cuidará dos campos ausentes automaticamente.

    import pandas as pd
    
    
    data = {
      "headers": [
    
      ],
      "items": [
        
      ],
    }`enter code here`
    
    • 0

relate perguntas

  • Extraia a string da linha duplicada, remova a duplicata, forneça a contagem de strings [duplicada]

  • percorrendo colunas para gerar countplot () seaborn

  • Como posso obter o máximo de cada linha em uma coluna de índice

  • Crie uma matriz dask com pyarrow dtype

  • Divida as entradas no dataframe [duplicado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve