Pandas:DataFrame 列表字典,解析 API 响应并正确排列数据

时间:2021-08-01 13:38:10

标签: python pandas

我正在努力与熊猫一起获得以下结果。你能帮我解决这个问题吗?

这是一个代码:

 @Bean
    public Map<String, Object> consumerConfigs() {
    Map<String, Object> props = new HashMap<>();
    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, 
    bootstrapServers);
    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, 
    StringDeserializer.class);
    props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, 
    StringDeserializer.class);
    props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
    props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, true);
    props.put(ConsumerConfig.ISOLATION_LEVEL_CONFIG, 
   "read_committed");
    props.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, 10000);
    props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, 30000);
    props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
    props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 
    maxpollRecords);
    return props;
 }

  @Bean
   public ConsumerFactory<Object, Object> consumerFactory() {
    return new DefaultKafkaConsumerFactory<>(consumerConfigs());
  }



  /**
 * Batch Listener */
 
   @Bean
   @Primary
   public ConcurrentKafkaListenerContainerFactory<Object, Object> 
    kafkaListenerContainerFactoryBatch (
    ConcurrentKafkaListenerContainerFactoryConfigurer configurer,  
    ConsumerFactory<Object, Object> kafkaConsumerFactory,
    KafkaOperations<? extends Object, ? extends Object> template ) {
  
        ConcurrentKafkaListenerContainerFactory<Object, Object> 
        factory = new ConcurrentKafkaListenerContainerFactory<>();
        configurer.configure(factory, consumerFactory());
        factory.setBatchListener(true); 
        factory.getContainerProperties().setAckMode(AckMode.MANUAL);
        DeadLetterPublishingRecoverer recoverer = new 
        DeadLetterPublishingRecoverer(template);    
        ExponentialBackOff fbo = new ExponentialBackOff(); 
        fbo.setMaxElapsedTime(maxElapsedTime);
        fbo.setInitialInterval(initialInterval);
        fbo.setMultiplier(multiplier);
        RecoveringBatchErrorHandler errorHandler = new 
        RecoveringBatchErrorHandler(recoverer, fbo);
        factory.setBatchErrorHandler(errorHandler);
        factory.setConcurrency(setConcurrency);
        return factory;
  }

我得到了什么。

response =[{'type': 'heartrate', 
    'data': [27, 32, 35, 31, 29, 30],
    'education':  'bachelor',
    'salary': 80000}].     

df = pd.DataFrame(response)

我想要达到的目标:

        type                      data education  salary
0  heartrate  [27, 32, 35, 31, 29, 30]  bachelor   80000

注意:我发现如果我去掉方括号它会起作用,但这实际上是 api 响应,因此无法修改原始数据。

2 个答案:

答案 0 :(得分:0)

给你:

response ={'type': ['heartrate' for _ in range(6)], 
    'data': [27, 32, 35, 31, 29, 30],
    'education':  ['bachelor' for _ in range(6)],
    'salary': [80000 for _ in range(6)]}

df = pd.DataFrame(response)

答案 1 :(得分:0)

然后只需在 data 列上分解数据框,ignore_indexTrue

>>> df.explode('data', ignore_index=True)

        type data education  salary
0  heartrate   27  bachelor   80000
1  heartrate   32  bachelor   80000
2  heartrate   35  bachelor   80000
3  heartrate   31  bachelor   80000
4  heartrate   29  bachelor   80000
5  heartrate   30  bachelor   80000